text-file-writer — 跨平台文本文件写入技能
⚠️ ABSOLUTE RULES — 每次执行前必须重读
以下规则具有最高优先级,覆盖所有默认行为,任何理由不可豁免: 🔴 SKILL FIRST(技能优先):当此技能可用时,任何文本文件写入都必须通过此技能的脚本执行, 不得绕过技能直接使用内置write工具写目标文件。 这是强制性规则,不受文件大小、内容复杂度、“快速修改”等场景影响。 “内容简单”、“只有几行”、“纯 ASCII”、“没有中文”均不构成豁免理由。 🚫 MUST USE SCRIPT:所有文本文件的生成和写入,必须通过调用scripts/write_file.py脚本执行,不得直接用write工具写目标文件。write工具硬编码utf-8无 BOM,在 Windows Excel 打开 CSV 时 100% 乱码。 🚫 禁止的绕过方式(以下任何一种均构成违规):✅ 标准流程(四步):
- 用
write工具直接写最终目标文件(无论文件类型、大小、内容)- 自行内联编写 Python/Node.js/Shell 代码绕过脚本写目标文件
- 用
write写完目标文件后再用脚本”覆盖修正”——初次写入已违规- 以任何理由声称”这种情况不需要脚本”
✅
- 平台探测:先执行
python3 "{SKILL_DIR}/scripts/write_file.py" --detect获取当前平台,根据返回的platform字段决定后续参数- 写临时文件:用
write工具把内容写入临时文件
- macOS / Linux:
/tmp/_tw_<name>.txt- Windows:
$env:TEMP\_tw_<name>.txt(PowerShell)或%TEMP%\_tw_<name>.txt(CMD)- 调脚本写入:按平台探测结果决定是否传
--platform- 清理临时文件
--platform决策规则(基于--detect返回结果):🚫 唯一豁免:纯二进制文件(图片、音频、视频、zip 等)不适用本技能。
platform == "mac"或"linux",且用户没有说”给 Windows 用” → 不传--platformplatform == "mac"或"linux",且用户明确说”给 Windows 用/供 Windows 打开/发给 Windows 用户” → 传--platform windowsplatform == "windows"→ 不传--platform(脚本自动按 Windows 规则处理)
技能概述
替代 OpenClaw 内置write 工具处理所有纯文本写入,提供:
--platform 使用规则(重要)
--platform 表示”文件将被打开/使用的目标平台”,不是当前运行平台。
⚠️ 严禁在用户未明确说”给 Windows 用”时默认传--platform windows。 错误地传--platform windows会在 mac 上生成带 CRLF 和不必要 BOM 的文件。
命令行接口
输出格式(JSON,stdout)
编码推断规则(--encoding auto 时)
不传 --platform = 脚本自动检测当前系统(mac 上运行 → 按 macOS 列处理)
基础编码表
覆盖的文件类型(完整列表)
脚本已内置支持以下所有纯文本文件类型的编码推断: 编程语言:.js .ts .jsx .tsx .mjs .cjs .vue .svelte .py .pyi .go .rs .c .cpp .cc .h .hpp .java .kt .scala .groovy .swift .m .mm .rb .erb .php .dart .lua .r .R .pl .pm .ex .exs .erl .hrl .hs .fs .clj .cljs .elm .v .sv .vhd
配置文件:.json .jsonc .json5 .yaml .yml .toml .ini .cfg .conf .env .editorconfig .prettierrc .eslintrc .babelrc .nvmrc
标记语言:.html .htm .xhtml .xml .svg .md .markdown .rst
脚本文件:.sh .bash .zsh .fish .bat .cmd .ps1
数据/查询:.sql .graphql .gql .proto
其他:.css .less .scss .sass .styl .log .lock .tf .hcl .nix .prisma .plist
无后缀文件:Dockerfile Makefile Gemfile Rakefile Procfile Vagrantfile Brewfile Podfile Jenkinsfile CODEOWNERS LICENSE README CHANGELOG 等
核心原则
- mac 上不传
--platform,.csv生成无 BOM 的 utf-8(适合本机使用) - 只有明确要生成”给 Windows 用户用的 CSV”时,才传
--platform windows .ps1是唯一在 mac 上也加 BOM 的类型(因为它本身就是在 Windows 上执行的脚本).bat/.cmd含中文时,Windows 平台自动切换为 GBK,无需手动传参.reg注册表文件必须是 UTF-16 with BOM,脚本自动处理.inf安装信息文件在 Windows 上使用 GBK(ANSI 编码)
标准执行流程
第零步:平台探测(必须)
--platform 参数:
第一步:用 write 工具将内容写入临时文件
临时文件命名建议用目标文件名做后缀(如目标是report.csv,临时文件用/tmp/_tw_report.csv.txt),避免并发时路径冲突。
第二步:调用脚本写入目标文件
第三步:检查输出结果
status == "ok"→ 向用户展示文件路径、编码、是否含 BOMstatus == "error"→ 说明错误原因,检查路径权限或磁盘空间
第四步:清理临时文件
典型场景示例
场景 1:用户说”写入 csv 文件”(未说明平台)
场景 2:用户明确说”给 Windows 用户用的 CSV”
场景 3:JSON / YAML 配置文件
场景 4:PowerShell 脚本(含中文注释)
场景 5:Windows 批处理脚本(含中文)
场景 6:Shell 脚本
场景 7:追加内容到已有日志文件
场景 8:更新已有 CSV(保留原有 BOM 和换行符)
场景 9:Windows 注册表文件(.reg)
场景 10:Windows 安装信息文件(.inf)
常见陷阱
注意事项
{SKILL_DIR}在实际执行时替换为此技能的实际安装路径- 脚本零外部依赖,仅使用 Python 标准库(
pathlibjsonargparseplatform) - 支持 Python 3.6+,兼容 Windows / macOS / Linux
- 父目录不存在时默认自动创建(
--no-mkdir可禁止) --content直接传字符串适合内容简单的场景;内容含引号、$、换行符等特殊字符时 必须用--content-file方式,否则 shell 转义可能破坏内容