Specify a webhook-driven task for OpenClaw
Describe event inputs, validation, deduplication, and intended actions before integration work.
1,453,506 AI resources indexedWorking toward the worldβs largest AI resource index.
How to reliably write files containing multi-byte Unicode (emoji, special symbols) when write_file fails with 'unknown error' by falling back to run_shell with a heredoc.
---
name: unicode-safe-file-writing-44bc8fcdd315
description: How to reliably write files containing multi-byte Unicode (emoji, special symbols) when write_file fails with 'unknown error' by falling back to run_shell with a heredoc.
---
# Unicode-Safe File Writing
## Problem
The `write_file` tool may fail with `'unknown error'` when the file content
contains multi-byte Unicode characters such as:
- Emoji (e.g. `π`, `β
`, `β`)
- Special typographic symbols (e.g. `β`, `β’`, `β`, `Β©`)
- Non-ASCII characters outside the Latin-1 range
This is a known encoding limitation of `write_file`.
## Solution
Fall back to `run_shell` and write the file using a **shell heredoc**
(`cat > file << 'EOF' ... EOF`). The single-quoted delimiter `'EOF'`
prevents the shell from interpreting any special characters inside the
block.
---
## Step-by-Step Recovery
### Step 1 β Detect the failure
If `write_file` returns an error such as:
```
Error: unknown error
```
and the content contains non-ASCII characters, assume a Unicode encoding
issue and proceed to the heredoc fallback.
### Step 2 β Strip or replace problematic characters (if needed)
Before embedding content in the heredoc, decide whether to:
- **Keep** the characters as-is (works if the shell/terminal is UTF-8 aware)
- **Replace** emoji/symbols with ASCII equivalents (safest, most portable)
- **Remove** them entirely
Common replacements:
| Original | Replacement |
|----------|-------------|
| `β
` | `[OK]` |
| `β` | `[ERROR]` |
| `π` | `[START]` |
| `β` | `->` |
| `β’` | `-` |
| `β` | `--` |
### Step 3 β Write the file via heredoc
Use `run_shell` with the following pattern:
```bash
cat > path/to/file.ext << 'EOF'
...file content here (with Unicode stripped/replaced if needed)...
EOF
```
**Key details:**
- Use `'EOF'` (single-quoted) as the heredoc delimiter β this disables all
shell variable expansion and special character interpretation inside the block.
- Do **not** indent the closing `EOF` (it must start at column 0).
- For deeply nested content, choose a delimiter that cannot appear in the
content itself (e.g. `'HEREDOC_END'`, `'FILEEND'`).
---
## Example
### Failing call
```python
write_file(
path="src/components/StatusPanel.ts",
content="// Status icons\nconst icons = { ok: 'β
', err: 'β', run: 'π' };\n"
)
# β Error: unknown error
```
### Recovery via heredoc
```bash
cat > src/components/StatusPanel.ts << 'EOF'
// Status icons
const icons = { ok: '[OK]', err: '[ERROR]', run: '[START]' };
EOF
```
Or, if UTF-8 output is acceptable in the environment:
```bash
cat > src/components/StatusPanel.ts << 'EOF'
// Status icons
const icons = { ok: 'β
', err: 'β', run: 'π' };
EOF
```
---
## Multi-File Scenario
When writing several files and one fails, write the others with `write_file`
as normal and apply the heredoc fallback only to the failing file(s):
```bash
# Write multiple files that contain Unicode
cat > src/utils/icons.ts << 'EOF'
export const ICONS = {
success: '[OK]',
failure: '[FAIL]',
pending: '[...]',
};
EOF
cat > src/utils/labels.ts << 'EOF'
export const LABELS = {
title: 'Dashboard',
subtitle: 'Real-time status',
};
EOF
```
---
## Important Notes
1. **Always prefer `write_file` first** β only fall back to the heredoc
approach when `write_file` fails.
2. **Verify after writing** β use `run_shell` with `cat path/to/file` or
`head -5 path/to/file` to confirm the content was written correctly.
3. **Directory creation** β `write_file` auto-creates parent directories;
the heredoc approach does not. Pre-create directories with
`mkdir -p path/to/dir` if needed.
4. **Large files** β heredocs work well for files of any practical size;
there is no meaningful shell limit.
5. **Escaping backslashes** β inside a single-quoted heredoc, backslashes
are treated literally (no escaping needed), which is usually desirable.---
name: unicode-safe-file-writing-44bc8fcdd315
description: How to reliably write files containing multi-byte Unicode (emoji, special symbols) when write_file fails with 'unknown error' by falling back to run_shell with a heredoc.
---
# Unicode-Safe File Writing
## Problem
The `write_file` tool may fail with `'unknown error'` when the file content
contains multi-byte Unicode characters such as:
- Emoji (e.g. `π`, `β
`, `β`)
- Special typographic symbols (e.g. `β`, `β’`, `β`, `Β©`)
- Non-ASCII characters outside the Latin-1 range
This is a known encoding limitation of `write_file`.
## Solution
Fall back to `run_shell` and write the file using a **shell heredoc**
(`cat > file << 'EOF' ... EOF`). The single-quoted delimiter `'EOF'`
prevents the shell from interpreting any special characters inside the
block.
---
## Step-by-Step Recovery
### Step 1 β Detect the failure
If `write_file` returns an error such as:
```
Error: unknown error
```
and the content contains non-ASCII characters, assume a Unicode encoding
issue and proceed to the heredoc fallback.
### Step 2 β Strip or replace problematic characters (if needed)
Before embedding content in the heredoc, decide whether to:
- **Keep** the characters as-is (works if the shell/terminal is UTF-8 aware)
- **Replace** emoji/symbols with ASCII equivalents (safest, most portable)
- **Remove** them entirely
Common replacements:
| Original | Replacement |
|----------|-------------|
| `β
` | `[OK]` |
| `β` | `[ERROR]` |
| `π` | `[START]` |
| `β` | `->` |
| `β’` | `-` |
| `β` | `--` |
### Step 3 β Write the file via heredoc
Use `run_shell` with the following pattern:
```bash
cat > path/to/file.ext << 'EOF'
...file content here (with Unicode stripped/replaced if needed)...
EOF
```
**Key details:**
- Use `'EOF'` (single-quoted) as the heredoc delimiter β this disables all
shell variable expansion and special character interpretation inside the block.
- Do **not** indent the closing `EOF` (it must start at column 0).
- For deeply nested content, choose a delimiter that cannot appear in the
content itself (e.g. `'HEREDOC_END'`, `'FILEEND'`).
---
## Example
### Failing call
```python
write_file(
path="src/components/StatusPanel.ts",
content="// Status icons\nconst icons = { ok: 'β
', err: 'β', run: 'π' };\n"
)
# β Error: unknown error
```
### Recovery via heredoc
```bash
cat > src/components/StatusPanel.ts << 'EOF'
// Status icons
const icons = { ok: '[OK]', err: '[ERROR]', run: '[START]' };
EOF
```
Or, if UTF-8 output is acceptable in the environment:
```bash
cat > src/components/StatusPanel.ts << 'EOF'
// Status icons
const icons = { ok: 'β
', err: 'β', run: 'π' };
EOF
```
---
## Multi-File Scenario
When writing several files and one fails, write the others with `write_file`
as normal and apply the heredoc fallback only to the failing file(s):
```bash
# Write multiple files that contain Unicode
cat > src/utils/icons.ts << 'EOF'
export const ICONS = {
success: '[OK]',
failure: '[FAIL]',
pending: '[...]',
};
EOF
cat > src/utils/labels.ts << 'EOF'
export const LABELS = {
title: 'Dashboard',
subtitle: 'Real-time status',
};
EOF
```
---
## Important Notes
1. **Always prefer `write_file` first** β only fall back to the heredoc
approach when `write_file` fails.
2. **Verify after writing** β use `run_shell` with `cat path/to/file` or
`head -5 path/to/file` to confirm the content was written correctly.
3. **Directory creation** β `write_file` auto-creates parent directories;
the heredoc approach does not. Pre-create directories with
`mkdir -p path/to/dir` if needed.
4. **Large files** β heredocs work well for files of any practical size;
there is no meaningful shell limit.
5. **Escaping backslashes** β inside a single-quoted heredoc, backslashes
are treated literally (no escaping needed), which is usually desirable.Imported from the listed AgentSkill.sh category. Complete supplied package files and notices are retained. Required external tools and credentials are not installed. No bundled code was executed during import. Individual agent task behavior has not been tested.