[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6XBN7SW4BMS71EN2VZGARNX":3,"skill-same:01M6XBN7SW4BMS71EN2VZGARNX":64},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":33,"linkOnly":34,"markdownContent":35,"markdownBody":36,"frontMatter":37,"refName":38,"commitSha":39,"skillDirectory":40,"forksCount":13,"repositoryHtmlUrl":41,"repositoryHomepageUrl":6,"ownerHtmlUrl":42,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":43,"install":44,"resources":57},"01M6XBN7SW4BMS71EN2VZGARNX","heredoc-file-write",null,"Use shell heredoc syntax as a workaround when write_file fails on complex TypeScript\u002FJSX\u002Fcode files with encoding or escaping issues","UF-gzj\u002Fopenspace-claude-evolution","UF-gzj","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F272393507?v=4","01M6XBCZB755P01VVYGQWPYZY3","01M6XBCZFJA5AREA17WGETA3FW",0,"MIT","https:\u002F\u002Fgithub.com\u002FUF-gzj\u002Fopenspace-claude-evolution\u002Fblob\u002Fmain\u002Fgdpval_bench\u002Fskills\u002Fheredoc-file-write\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32],"file","write","heredoc file write","typescript","code","issues","encoding","shell","syntax","use","files","as","with","jsx","when","2026-11-10 10:12:30",false,"---\nname: heredoc-file-write\ndescription: Use shell heredoc syntax as a workaround when write_file fails on complex TypeScript\u002FJSX\u002Fcode files with encoding or escaping issues\n---\n\n# Heredoc File Write Workaround\n\n## When to Use This Skill\n\nUse this pattern when:\n- `write_file` repeatedly fails with \"unknown error\" or similar messages\n- The target file contains complex code (TypeScript, JSX, JSON with special characters, etc.)\n- Standard file writing approaches encounter encoding or escaping issues\n- You need a reliable fallback method to create files\n\n## Core Technique\n\nSwitch from `write_file` to `run_shell` using heredoc syntax with `cat`. The heredoc approach handles special characters, quotes, and complex content more reliably.\n\n## Step-by-Step Instructions\n\n### Step 1: Identify Write Failures\n\nWhen `write_file` fails repeatedly on the same file:\n1. Note the error message (e.g., \"unknown error\", encoding issues)\n2. Review the file content for special characters, nested quotes, or complex syntax\n3. Attempt the heredoc workaround below\n\n### Step 2: Use Heredoc Syntax\n\nExecute shell command with heredoc:\n\n```bash\ncat > \u002Fpath\u002Fto\u002Ffile.tsx \u003C\u003C 'EOF'\n\u002F\u002F Your file content here\nimport React from 'react';\nconst Component = () => {\n  return \u003Cdiv>Hello\u003C\u002Fdiv>;\n};\nexport default Component;\nEOF\n```\n\n### Step 3: Key Heredoc Rules\n\n1. **Use quoted delimiter** (`'EOF'` not `EOF`) to prevent variable expansion:\n   - `'EOF'` = literal content (recommended for code files)\n   - `EOF` = allows variable expansion (use only if needed)\n\n2. **Match delimiters exactly**: Opening and closing `EOF` must be on their own lines with no leading\u002Ftrailing whitespace\n\n3. **No escaping needed**: Content between delimiters is taken literally when using quoted delimiter\n\n### Step 4: Verify File Creation\n\nAfter executing the heredoc command:\n1. Check if file exists: `ls -la \u002Fpath\u002Fto\u002Ffile.tsx`\n2. Verify content: `cat \u002Fpath\u002Fto\u002Ffile.tsx` or `head -20 \u002Fpath\u002Fto\u002Ffile.tsx`\n3. Proceed with subsequent tasks once confirmed\n\n## Example Scenarios\n\n### TypeScript\u002FJSX Component\n\n```bash\ncat > src\u002Fcomponents\u002FButton.tsx \u003C\u003C 'EOF'\nimport React from 'react';\n\ninterface ButtonProps {\n  label: string;\n  onClick: () => void;\n}\n\nexport const Button: React.FC\u003CButtonProps> = ({ label, onClick }) => {\n  return (\n    \u003Cbutton onClick={onClick} className=\"btn-primary\">\n      {label}\n    \u003C\u002Fbutton>\n  );\n};\nEOF\n```\n\n### JSON Configuration\n\n```bash\ncat > tsconfig.json \u003C\u003C 'EOF'\n{\n  \"compilerOptions\": {\n    \"target\": \"ES2020\",\n    \"module\": \"commonjs\",\n    \"strict\": true,\n    \"esModuleInterop\": true\n  },\n  \"include\": [\"src\u002F**\u002F*\"]\n}\nEOF\n```\n\n### Complex Shell Script\n\n```bash\ncat > deploy.sh \u003C\u003C 'EOF'\n#!\u002Fbin\u002Fbash\nset -e\n\necho \"Deploying...\"\nif [ \"$ENV\" = \"production\" ]; then\n  echo \"Production deployment\"\nfi\nEOF\n```\n\n## Advantages Over write_file\n\n1. **No escaping complexity**: Quotes, backslashes, and special characters work naturally\n2. **Preserves formatting**: Indentation and line breaks remain exact\n3. **Handles multi-line content**: No need to concatenate strings or use base64\n4. **More reliable**: Shell handles file I\u002FO directly with fewer abstraction layers\n\n## Limitations\n\n- Creates files in shell execution context (ensure correct working directory)\n- Less programmatic than `write_file` for dynamic content generation\n- Requires shell access (may not work in restricted environments)\n\n## Troubleshooting\n\n**Problem**: File not created at expected path\n- **Solution**: Use absolute paths or verify current working directory with `pwd`\n\n**Problem**: Content appears corrupted\n- **Solution**: Ensure delimiter is quoted (`'EOF'`) and closing delimiter has no trailing whitespace\n\n**Problem**: Permission denied\n- **Solution**: Ensure target directory exists and you have write permissions","# Heredoc File Write Workaround\n\n## When to Use This Skill\n\nUse this pattern when:\n- `write_file` repeatedly fails with \"unknown error\" or similar messages\n- The target file contains complex code (TypeScript, JSX, JSON with special characters, etc.)\n- Standard file writing approaches encounter encoding or escaping issues\n- You need a reliable fallback method to create files\n\n## Core Technique\n\nSwitch from `write_file` to `run_shell` using heredoc syntax with `cat`. The heredoc approach handles special characters, quotes, and complex content more reliably.\n\n## Step-by-Step Instructions\n\n### Step 1: Identify Write Failures\n\nWhen `write_file` fails repeatedly on the same file:\n1. Note the error message (e.g., \"unknown error\", encoding issues)\n2. Review the file content for special characters, nested quotes, or complex syntax\n3. Attempt the heredoc workaround below\n\n### Step 2: Use Heredoc Syntax\n\nExecute shell command with heredoc:\n\n```bash\ncat > \u002Fpath\u002Fto\u002Ffile.tsx \u003C\u003C 'EOF'\n\u002F\u002F Your file content here\nimport React from 'react';\nconst Component = () => {\n  return \u003Cdiv>Hello\u003C\u002Fdiv>;\n};\nexport default Component;\nEOF\n```\n\n### Step 3: Key Heredoc Rules\n\n1. **Use quoted delimiter** (`'EOF'` not `EOF`) to prevent variable expansion:\n   - `'EOF'` = literal content (recommended for code files)\n   - `EOF` = allows variable expansion (use only if needed)\n\n2. **Match delimiters exactly**: Opening and closing `EOF` must be on their own lines with no leading\u002Ftrailing whitespace\n\n3. **No escaping needed**: Content between delimiters is taken literally when using quoted delimiter\n\n### Step 4: Verify File Creation\n\nAfter executing the heredoc command:\n1. Check if file exists: `ls -la \u002Fpath\u002Fto\u002Ffile.tsx`\n2. Verify content: `cat \u002Fpath\u002Fto\u002Ffile.tsx` or `head -20 \u002Fpath\u002Fto\u002Ffile.tsx`\n3. Proceed with subsequent tasks once confirmed\n\n## Example Scenarios\n\n### TypeScript\u002FJSX Component\n\n```bash\ncat > src\u002Fcomponents\u002FButton.tsx \u003C\u003C 'EOF'\nimport React from 'react';\n\ninterface ButtonProps {\n  label: string;\n  onClick: () => void;\n}\n\nexport const Button: React.FC\u003CButtonProps> = ({ label, onClick }) => {\n  return (\n    \u003Cbutton onClick={onClick} className=\"btn-primary\">\n      {label}\n    \u003C\u002Fbutton>\n  );\n};\nEOF\n```\n\n### JSON Configuration\n\n```bash\ncat > tsconfig.json \u003C\u003C 'EOF'\n{\n  \"compilerOptions\": {\n    \"target\": \"ES2020\",\n    \"module\": \"commonjs\",\n    \"strict\": true,\n    \"esModuleInterop\": true\n  },\n  \"include\": [\"src\u002F**\u002F*\"]\n}\nEOF\n```\n\n### Complex Shell Script\n\n```bash\ncat > deploy.sh \u003C\u003C 'EOF'\n#!\u002Fbin\u002Fbash\nset -e\n\necho \"Deploying...\"\nif [ \"$ENV\" = \"production\" ]; then\n  echo \"Production deployment\"\nfi\nEOF\n```\n\n## Advantages Over write_file\n\n1. **No escaping complexity**: Quotes, backslashes, and special characters work naturally\n2. **Preserves formatting**: Indentation and line breaks remain exact\n3. **Handles multi-line content**: No need to concatenate strings or use base64\n4. **More reliable**: Shell handles file I\u002FO directly with fewer abstraction layers\n\n## Limitations\n\n- Creates files in shell execution context (ensure correct working directory)\n- Less programmatic than `write_file` for dynamic content generation\n- Requires shell access (may not work in restricted environments)\n\n## Troubleshooting\n\n**Problem**: File not created at expected path\n- **Solution**: Use absolute paths or verify current working directory with `pwd`\n\n**Problem**: Content appears corrupted\n- **Solution**: Ensure delimiter is quoted (`'EOF'`) and closing delimiter has no trailing whitespace\n\n**Problem**: Permission denied\n- **Solution**: Ensure target directory exists and you have write permissions",{"name":5,"description":7},"main","0650921d63895de3997bc81f1ff1d0ac67032072","gdpval_bench\u002Fskills\u002Fheredoc-file-write","https:\u002F\u002Fgithub.com\u002FUF-gzj\u002Fopenspace-claude-evolution","https:\u002F\u002Fgithub.com\u002FUF-gzj","2026-04-16 09:31:03",{"source":8,"skillName":5,"commands":45,"prompt":55,"zipAvailable":56},[46,49,52],{"tool":47,"command":48},"npx","npx skills add UF-gzj\u002Fopenspace-claude-evolution --skill heredoc-file-write",{"tool":50,"command":51},"bunx","bunx skills add UF-gzj\u002Fopenspace-claude-evolution --skill heredoc-file-write",{"tool":53,"command":54},"pnpm","pnpm dlx skills add UF-gzj\u002Fopenspace-claude-evolution --skill heredoc-file-write","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FUF-gzj\u002Fopenspace-claude-evolution\u002Fblob\u002Fmain\u002Fgdpval_bench\u002Fskills\u002Fheredoc-file-write\u002FSKILL.md",true,[58],{"path":59,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":62,"sourceHtmlUrl":63},".skill_id","OTHER","其他",32,"https:\u002F\u002Fgithub.com\u002FUF-gzj\u002Fopenspace-claude-evolution\u002Fblob\u002Fmain\u002Fgdpval_bench\u002Fskills\u002Fheredoc-file-write\u002F.skill_id",[65,86,102,110,140,156],{"skillNo":66,"name":67,"nameZh":6,"description":68,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":71,"publishedAt":33},"01M6XCCXD3NCM2YKR3WNGBASPC","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\u002FUF-gzj\u002Fopenspace-claude-evolution\u002Fblob\u002Fmain\u002Fshowcase\u002Fskills\u002Fwrite-special-chars-ts-check\u002FSKILL.md",[],[72,19,73,21,74,75,76,77,78,79,80,81,82,28,83,84,18,85],"check","write special chars ts check","filters","characters","Existing","type-checking","for","errors","script","output","type","only","template","python",{"skillNo":87,"name":88,"nameZh":6,"description":89,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":33},"01M6XCCT7E3J922Q345PBGSHPN","write-special-chars-readback","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.","https:\u002F\u002Fgithub.com\u002FUF-gzj\u002Fopenspace-claude-evolution\u002Fblob\u002Fmain\u002Fshowcase\u002Fskills\u002Fwrite-special-chars-readback\u002FSKILL.md",[],[93,94,19,18,95,85,96,97,98,99,100,84,101,30,75,78,80],"readback","write special chars readback","helper","post","via","scripts","cleanup","read","verification",{"skillNo":103,"name":104,"nameZh":6,"description":105,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":106,"categories":107,"keywords":108,"publishedAt":33},"01M6XCCMQX1R8B6FECWB3P63T7","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\u002FUF-gzj\u002Fopenspace-claude-evolution\u002Fblob\u002Fmain\u002Fshowcase\u002Fskills\u002Fwrite-special-chars-heredoc\u002FSKILL.md",[],[109,19,75,25,80,97,84,18,85,78],"write special chars heredoc",{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":121,"publishedAt":33},"01M6XCCG41M994JJEX6VN52PEP","worldmonitor-reference","Curated architecture index of the WorldMonitor open-source dashboard. Reference for extracting patterns — vanilla TypeScript, Panel class hierarchy, service layer, CSS grid, API edge functions, refresh scheduler, and 60+ data source integrations.","https:\u002F\u002Fgithub.com\u002FUF-gzj\u002Fopenspace-claude-evolution\u002Fblob\u002Fmain\u002Fshowcase\u002Fskills\u002Fworldmonitor-reference\u002FSKILL.md",[116],{"categoryNo":117,"categoryName":118,"taxonomyType":119,"taxonomyTypeDesc":120},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[122,123,124,125,126,21,127,128,129,130,131,78,132,133,134,135,136,137,138,139],"reference","worldmonitor","worldmonitor reference","architecture","dashboard","css","scheduler","layer","hierarchy","source","extracting","panel","patterns","edge functions","integrations","open","api","data",{"skillNo":141,"name":142,"nameZh":6,"description":143,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":144,"categories":145,"keywords":146,"publishedAt":33},"01M6XCCCHWNKG2W4VH9E6A10HF","virtual-list","Implement efficient virtual scrolling for rendering large lists with DOM recycling, chunk-based rendering, and performance optimizations","https:\u002F\u002Fgithub.com\u002FUF-gzj\u002Fopenspace-claude-evolution\u002Fblob\u002Fmain\u002Fshowcase\u002Fskills\u002Fvirtual-list\u002FSKILL.md",[],[147,148,149,150,78,151,30,152,153,154,155],"virtual list","list","virtual","chunk","dom","rendering","recycling","implement","performance",{"skillNo":157,"name":158,"nameZh":6,"description":159,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":160,"categories":161,"keywords":162,"publishedAt":33},"01M6XCC7X8PKMR2DEW91XGHYSV","verify-directory-structure","Diagnose and resolve file access issues by first verifying the directory structure.","https:\u002F\u002Fgithub.com\u002FUF-gzj\u002Fopenspace-claude-evolution\u002Fblob\u002Fmain\u002Fshowcase\u002Fskills\u002Fverify-directory-structure\u002FSKILL.md",[],[163,164,165,166,167,168,18,23,169,170],"directory","verify directory structure","structure","verify","access","first","diagnose","file access"]