Skip to content

The 26 Lines of Agent Rules I Deleted From Two Repos

Adityo Guni Waluyo

I removed the no-coding block from two agent rules files. Instruction rules turned out to be loaded context, not enforcement; hooks do the enforcing.

TL;DR

He deleted the same 26-line no-coding mandate from two repos after his cron flagged the commits as duplicates. The mandate failed because instruction files are just context that fades, not enforced gates, while real blocking needs hooks and verification. He kept lean context layers and now judges per task, doing small edits directly and delegating only complex refactors to Claude.

Today, October 1st 2026, at 12:48 PM WIB, I pushed two rules-file commits at once. One in the my-apps repo, deleting 19 lines. One in server-old, deleting 8 lines. The content was identical: a "Hard rule: no coding by Hermes" block.

The mandate was almost a month old: all coding work had to be delegated to Claude Code, and Hermes was forbidden from writing code itself. Funnily enough, my own infrastructure cron flagged the twins first, reporting an embedding similarity of 0.68 between the two pending entries. That was the moment I knew the doctrine had to go.

My First Guess Was Wrong

When I first wrote that mandate in early September, I was sure instruction files worked like laws the agent had to obey. Write it in AGENTS.md, and the agent would never dare break it.

I was wrong, and not in a small way. The official Claude Code docs call these instruction files "[2] context, not enforced configuration". The agent reads the rules as context each session; it never executes them as a gate or hard validation. When the context window fills up, or a prompt never touches the rule, the doctrine quietly stops having any effect. And the annoying part: the mandate never errored, never failed a build. It just slowly stopped mattering.

What actually blocks an agent action is not text in markdown but a hook. [2] A PreToolUse hook in Claude Code can stop execution before a tool runs. My no-coding mandate was plain text loaded into the context window, and the cost was real: the context window holds the entire conversation, every file read, down to every [3] command output.

Anthropic puts it bluntly: "[3] Bloated CLAUDE.md files cause Claude to ignore your actual instructions!". Their advice is simple: ask of every line in an instruction file, "[3] Would removing this cause Claude to make mistakes?" If not, cut it.

Per-task judgment is not a theory for me; I practiced it in this very article cycle. The two twin commits arrived as separate pipeline entries, and Hermes handled the research, drafting, and push itself. The old detour meant writing an English delegation prompt, sending it to Claude Code, reviewing the diff, then committing again. For a text-polishing and JSON-assembly job, that chain was unnecessary overhead, and it burned tokens twice.

Why Deleting Those 26 Lines Made Sense

First reason: the rule had to stay in sync across two repos. The nested pattern makes the agent automatically read the nearest file in the directory tree, and [1] the closest one wins. Force-copy the same block into every repo, miss one, and the doctrine leaks. Fragile by design.

Second: my setup already had guardrails that fit better. I run verify tools, hooks, and approval gates for production actions. Enforcement lives in the right layer, not in markdown text that can be skipped.

Third: the approach is now per-task judgment. Small jobs like one-liners, config edits, read-only inspection, or git operations I do directly. When it is a complicated multi-file refactor, that is when I delegate to Claude Code. The skill and the wrapper stay around as optional tooling, not a mandate. In practice, small tasks finish faster without the delegation chain, and big tasks still get the extra muscle. The no-coding doctrine is officially retired from my daily workflow.

The Rules Structure I Kept

Deleting the mandate did not mean deleting every rule. AGENTS.md still carries per-repo procedures. The semantic fact store keeps working across projects, and MEMORY.md still holds global preferences. Three layers of context, without the bloating mandate block.

AGENTS.md itself is popular, used by more than [1] 60k open-source projects as a README specifically for agents. The advice from the community and Anthropic matches: [3] keep it short and human-readable. A complicated multi-step procedure belongs in [2] a skill, not stacked onto an instruction file.

The whole thing leaves my workflow looser. The agent is no longer weighed down by rules that cannot technically be executed, and I no longer have to check whether the doctrine leaked into some repo. Sometimes the best rule is the one you never write, because you enforce it directly at the system layer.

Sources

Related articles