no-heredoc — GitHub Copilot rule: no heredocs in the terminal
A rule that stops the agent from writing files through terminal heredocs and redirections, because those commands corrupt content in VS Code.
.github/instructions/no-heredoc.instructions.mdWhat no-heredoc does
Heredoc operations are broken in the VS Code Copilot integration. Tab characters fire shell completion, quote and backtick escaping fails, and the output gets cut off on exit code 130. The file ends up mangled or truncated, and you fix it by hand.
The rule takes precedence over any other learned behaviour. Before any command that creates or modifies a file, the agent has to stop and ask whether it is about to reach for cat, echo, printf, tee or >/>>. If yes, the command does not run; the environment's file editing tool does the work instead. New files are created with it, existing ones are patched with it, and deletion stays with rm.
The terminal is not banned outright. Package installs, builds, tests, git add and git commit, running existing code, filesystem navigation and downloads through curl or wget are all fine. Only heredoc syntax (<<) and multi-line redirections carrying content are off limits. Drop the rule file at .github/instructions/no-heredoc.instructions.md and it applies to every file in the project.
What it helps with
- create a file with content without getting a corrupted copy
- keep heredocs and multi-line redirections out of the agent's workflow
- tell the agent when the terminal is still the right tool
- protect configs and scripts from truncation on exit code 130
- move file edits onto editing tools instead of the shell
Example prompts for the agent
- create
.env.examplewith these variables, not through the terminal - add a new build script to
package.json - edit
docker-compose.ymland add a redis service
How to install no-heredoc
Manually: put the files in place
.github/instructions/no-heredoc.instructions.mdThe applyTo field sets which files it applies to
Manually: put the files in place
.claude/rules/no-heredoc.mdThe paths frontmatter field limits the files: move applyTo from the source into paths
AGENTS.md
Codex reads AGENTS.md: paste the rule text there
Manually: put the files in place
.cursor/rules/no-heredoc.mdcFrontmatter: description, globs, alwaysApply. Move applyTo from the source into globs, or the rule will not attach on its own
Manually: put the files in place
.devin/rules/no-heredoc.mdManually: put the files in place
.clinerules/no-heredoc.mdStep by step, with commands for each platform: AGENTS.md vs CLAUDE.md: what they are and which one to use
Questions about no-heredoc
How do I install no-heredoc in GitHub Copilot?
Place the rule file at .github/instructions/no-heredoc.instructions.md. It then applies to every file in the project.
What does no-heredoc do?
It blocks the agent from creating or modifying files through the terminal: cat, echo, printf, tee and redirections. File editing tools are used instead.
Which terminal commands are still allowed?
Package installs, builds, tests, git operations, running existing code, filesystem navigation, plus curl and wget when they are not writing content into a file.
Source text
no-heredoc.instructions.md · MIT
--- name: 'No Heredoc File Operations' description: 'Prevents terminal heredoc file corruption in VS Code Copilot by enforcing use of file editing tools instead of shell redirections' applyTo: '**' --- # MANDATORY: File Operation Override This instruction applies to ALL agents and ALL file operations. It takes precedence over any other learned behavior. ## The Problem Terminal heredoc operations are BROKEN in VS Code's Copilot integration. They cause: - File corruption from tab characters triggering shell completion - Mangled content from quote/backtick escaping failures - Truncated files from exit code 130 interruptions - Garbage output from special character interpretation ## The Rule **BEFORE writing ANY terminal command that creates or modifies a file, STOP.** Ask yourself: "Am I about to use `cat`, `echo`, `printf`, `tee`, or `>>`/`>` to write content to a file?" If YES → **DO NOT EXECUTE.** Use file editing tools instead. ## Forbidden Patterns ```bash # ALL OF THESE CORRUPT FILES - NEVER USE THEM cat > file << EOF cat > file << 'EOF' cat > file <<EOF cat > file <<'EOF' cat > file <<-EOF cat >> file << EOF echo "multi line" > file printf '%s\n' "line1" "line2" > file tee file << EOF tee file << 'EOF' ``` ## Required Approach Instead of terminal commands for file content: - **New files** → Use the file creation/editing tool provided by your environment - **Modify files** → Use the file editing tool provided by your environment - **Delete files** → Use the file deletion tool or `rm` command ## Terminal IS Allowed For - `npm install`, `pip install`, `cargo add` (package management) - `npm run build`, `make`, `cargo build` (builds) - `npm test`, `pytest`, `go test` (testing) - `git add`, `git commit`, `git push` (version control) - `node script.js`, `python app.py` (running existing code) - `ls`, `cd`, `mkdir`, `pwd`, `rm` (filesystem navigation) - `curl`, `wget` (downloading, but not piping to files with content manipulation) ## Terminal is FORBIDDEN For - ANY file creation with content - ANY file modification with content - ANY heredoc syntax (`<<`) - ANY multi-line string redirection ## Enforcement This is not a suggestion. This is a hard technical requirement due to VS Code terminal integration bugs. Ignoring this instruction will result in corrupted files that the user must manually fix. When you need to create or edit a file: 1. Stop before typing any terminal command 2. Use the appropriate file editing tool 3. The tool will handle the content correctly without corruption
© github · MIT · github/awesome-copilot