lets write
Creates a file from stdin. The hook-visible replacement for cat > file <<'EOF'.
lets write [OPTIONS] <PATH>
What it does
Writes stdin to a new file, reports lines and bytes written and the new sha:, and runs the same
layer-1 check edit runs on creation. It refuses to silently overwrite an existing file, and
refuses to silently create an empty file — both need an explicit flag, because a heredoc typo
that would clobber a file with cat > should not clobber one here either.
Flags
| Flag | Meaning | Default |
|---|---|---|
--force |
overwrite an existing file | off |
--empty |
allow writing a file from empty stdin | off |
--json, --jsonl |
structured output | off |
--budget <N> |
shape the answer to ~N tokens | unset |
--max-bytes <N> |
content budget | 65536 |
--max-file-bytes <N> |
refuse content over this size | 8388608 |
--no-ignore |
shared flag; not meaningful for a single new path | off |
--allow-outside |
permit a path outside the working tree | off |
--no-check |
skip the layer-1 check on the new file | off |
-q, --quiet |
shared flag | off |
Output shape
── <path> · created · <N> lines · <B> bytes · sha:<hash>
── check: <result>
An overwrite (--force) prints overwritten and both the old and new sha:, joined by →.
Exit codes
| Exit | Slug | Means |
|---|---|---|
| 0 | — | created (or overwritten, with --force) |
| 1 | exists |
the file already exists; pass --force |
| 1 | empty_input |
stdin was empty; pass --empty |
| 6 | outside_tree |
the path is outside the working tree; pass --allow-outside |
| 7 | io_error |
any other I/O failure |
Examples
Create a file, checked on creation:
$ lets write scripts/new-check.sh <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
EOF
── scripts/new-check.sh · created · 2 lines · 38 bytes · sha:[..]
── check: structure ok
Refuses to clobber an existing file:
$ lets write scripts/new-check.sh <<'EOF'
#!/usr/bin/env bash
echo hi
EOF
? 1
scripts/new-check.sh exists (2 lines, sha:[..]) · pass --force to overwrite
ERROR_CODE=exists
--force overwrites, and the header shows both hashes:
$ lets write scripts/new-check.sh --force <<'EOF'
#!/usr/bin/env bash
echo hi
EOF
── scripts/new-check.sh · overwritten · 2 lines · 28 bytes · sha:954b9f40bbee→b53701120a2e
── check: structure ok
An empty file needs --empty, or it’s refused as likely a mistake:
$ lets write f.txt
? 1
f.txt: refuses empty stdin without --empty
ERROR_CODE=empty_input
$ lets write f.txt --empty
── f.txt · created · 0 lines · 0 bytes · sha:[..]
── check: skipped (no grammar for .txt)
Back to the top of lets write