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 /tmp helper scripts.
- License 许可
- MIT
- 所属仓库
- HKUDS/AgentPilot
- 最近更新
- 2026-11-06
- Stars
- ★ 8.0k
- Forks
- 940
01 前言 Front Matter
- name
- write-special-chars-readback
- description
- 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 /tmp helper scripts.
02 资源文件 1
- 其他.skill_id65 B
03 SKILL.md 正文
Write File Special Characters Workaround (Verified)
Problem
The write_file tool may fail with [ERROR] unknown error when file content
contains special characters such as:
- Apostrophes / single quotes (
') - Backticks (
`) - Template literals (
`${variable}`) common in TypeScript/JavaScript - Complex combinations of quotes and escape sequences
This is especially common when writing TypeScript, JavaScript, shell scripts, or any source file with string interpolation syntax.
Solution: Python Heredoc Workaround
Write a small Python script to /tmp/ that uses triple-quoted strings to
embed the file content, then execute it with python3.
Step-by-Step
- Compose a Python writer script using triple-quoted strings (
"""..."""). - Write the Python script itself to
/tmp/— its content is plain enough thatwrite_filewill succeed (no problematic characters in the wrapper). - Execute the script with
run_shell:python3 /tmp/write_<name>.py - Verify the written file with
read_fileto confirm contents are correct. - Clean up the
/tmphelper script:rm /tmp/write_<name>.py
Escaping Rules Inside the Python Script
| Character | How to handle |
|---|---|
Backslash \ |
Escape as \\ |
Triple double-quote """ |
Escape as \"\"\" or use ''' strings instead |
Everything else (backticks, $, ', {}) |
No escaping needed |
Template
#!/usr/bin/env python3
content = """
<YOUR FILE CONTENT HERE>
""".lstrip("\n")
with open("/path/to/target/file.ts", "w") as f:
f.write(content)
print("File written successfully.")
Concrete Example
Suppose you need to write a TypeScript file with template literals and
apostrophes that causes write_file to fail:
Step 1 — Write the Python helper to /tmp/:
Use write_file with path /tmp/write_greeting.py and content:
#!/usr/bin/env python3
content = """
export function greet(name: string): string {
const msg = `Hello, ${name}! It's a great day.`;
console.log(`Greeting: ${msg}`);
return msg;
}
""".lstrip("\n")
with open("/app/src/greeting.ts", "w") as f:
f.write(content)
print("Written: /app/src/greeting.ts")
Step 2 — Execute the helper:
python3 /tmp/write_greeting.py
Step 3 — Verify with read_file:
Use read_file with path /app/src/greeting.ts to confirm the file content
is exactly what was intended. This catches silent truncation or encoding
issues that shell cat output might obscure.
Step 4 — Clean up the helper:
rm /tmp/write_greeting.py
This keeps /tmp tidy and prevents stale helper scripts from being confused
with current ones on subsequent runs.
Standard Post-Write Checklist
After every use of this pattern, always complete all three of these steps:
| Step | Action | Why |
|---|---|---|
| ✅ Execute | python3 /tmp/write_<name>.py |
Writes the target file |
| ✅ Verify | read_file on the target path |
Confirms content integrity |
| ✅ Clean up | rm /tmp/write_<name>.py |
Prevents stale helper accumulation |
Skipping verification risks silently shipping a truncated or malformed file. Skipping cleanup risks confusion when the same helper name is reused later.
When to Use This Pattern
write_filereturns[ERROR] unknown errorfor a specific file.- The file contains TypeScript/JavaScript template literals.
- The file contains mixed quote styles or shell-like special characters.
- Any time direct file writing fails and content cannot be easily sanitized.
Multiple Files
For writing several problematic files in one pass, consolidate them into a single Python script:
#!/usr/bin/env python3
import os
files = {
"/app/src/component.tsx": """
import React from 'react';
const App = () => (
<div className={`container`}>
<h1>It's working!</h1>
</div>
);
export default App;
""".lstrip("\n"),
"/app/src/utils.ts": """
export const format = (val: number) => `Value: ${val.toFixed(2)}`;
""".lstrip("\n"),
}
for path, content in files.items():
os.makedirs(os.path.dirname(path), exist_ok=True)
with open(path, "w") as f:
f.write(content)
print(f"Written: {path}")
After running the multi-file script:
- Use
read_fileon each target path to verify all files were written correctly. - Then clean up:
rm /tmp/write_<name>.py
Key Advantages
- No shell escaping required — Python triple-quoted strings are literal.
- Handles all TypeScript syntax — template literals, generics, JSX, etc.
- Atomic — the target file is only created if the Python script succeeds.
- Debuggable — the intermediate
.pyfile can be inspected if needed. - Cleanup (required):
rm /tmp/write_*.pyafter all files are written — this is a mandatory step, not optional. - Verified — always follow up with
read_fileon the target file to confirm content integrity before considering the task complete.
04 同仓库更多 Skills
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.
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.
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.
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.
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.
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.