A README is supposed to be the front door of a software project.
It tells people what the repo does, why it exists, how to get started, and where to look next. That role still matters. A good README helps humans understand the project before they touch the code.
The problem starts when the README becomes more than documentation.
In many repos, the README quietly becomes the setup system, onboarding guide, task registry, local development manual, and source of truth for how work should happen.
That is README-driven infrastructure.
It works until the repo changes faster than the prose does.
The README still says npm test, but CI now runs pnpm test:ci. The README says “install Python,” but the app actually needs Python 3.12, Poetry, Docker, and Postgres.
A README is excellent for explanation. It is weak as the only place where a repo’s working state lives.
How README-driven infrastructure works in practice
README-driven infrastructure happens when operational truth lives mainly in README prose.
The README might be the only place that explains:
- which runtime version the repo needs
- which package manager to use
- how to install dependencies
- which services must be running
- what environment variables are required
- which command runs the real test suite
- which files or commands are unsafe for automation
- what to run after making a change
At first, this feels fine. A clear README is better than no README.
But prose drifts.
A team updates CI but forgets to update the README. The project switches from npm to pnpm. Tests start requiring Postgres or Redis. The real verification path moves into a workflow file. The README still shows the old happy path.
Humans can sometimes work around this. They inspect CI, search issues, ask a teammate, or message the maintainer who knows the real setup.
AI agents do not have that social fallback.
They need the repo to explain itself.
Why this breaks faster with AI agents
AI coding agents do more than read code. They choose commands, edit files, run tests, interpret failures, and decide whether a task is complete.
That means README drift becomes more expensive. If the README says one thing and CI does another, the agent has to infer which one is correct. If setup depends on an undocumented service, the agent may treat an environment failure as a code bug.
The model is not always the problem. Sometimes the repo is simply ambiguous.
That is why repo readiness for AI agents matters. The first post in this series covers the full framework. This post focuses on one specific failure mode: asking the README to carry too much operational truth.
Where README-only setup usually fails
README-only setup tends to break in a few predictable places.
1. Runtime and tool versions drift
A README might say:
install Python
But the repo may actually require Python 3.12, Poetry, Docker, and Postgres.
For a human, this becomes setup friction. For an agent, it becomes a guessing problem. The agent may choose a reasonable default that does not match the repo’s real environment.
2. Commands become outdated
Many repos start with simple commands:
npm install
npm test
Then the project grows.
CI starts using a different package manager. Tests split into unit and integration paths. The app needs a build step before verification. Some checks only run in containers.
The README may still show the old command.
An agent can run the documented command, get a passing result, and still miss the check that would fail in CI. This is the kind of drift a repo-readiness contract in Ota is meant to expose earlier, before humans or agents treat an outdated README command as the real workflow.
3. Service dependencies stay implicit
Modern repos often depend on Postgres, Redis, queues, object storage, search, or local emulators.
A README may mention these casually without explaining how to start them, which tasks require them, what ports they use, or how readiness is checked.
That creates false diagnosis.
If a backend test fails because Postgres is not running, an agent may treat the error as a code bug instead of an environment problem.
4. Safety boundaries are missing
A README often tells people how to run a repo. It rarely tells automation what not to do.
That matters because some commands are safe:
test
lint
typecheck
build
And some commands need caution:
deploy
publish
db:reset
terraform apply
The same applies to files. Source and tests may be safe to edit. Migrations, generated files, lockfiles, production config, and environment files may need review.
If these boundaries are not explicit, agents infer risk from filenames and context. That is not enough for reliable agentic development.
5. The README cannot validate itself
This is the core weakness.
A README can say pnpm test, but it does not prove the command exists.
It can say copy .env.example, but it does not prove the required variables are complete.
It can say “start Postgres before running tests,” but it does not prove Postgres is reachable.
The README can explain the project. The repo still needs a stronger way to declare, check, and run its working state.
What to do instead
You do not need to delete your README or rebuild your repo overnight.
Start by separating explanation from operational truth.
The README should become a map, not the entire operating manual.
It should still explain what the project does, who it is for, how to begin, and where contributors should go next. Then it should point readers toward clearer operational sources instead of carrying every setup detail itself.
Move operational guidance into more structured places:
-
CONTRIBUTING.mdfor contributor workflow -
AGENTS.mdfor AI-agent guidance -
.env.examplefor environment shape - a task runner or Makefile for common commands
- CI workflows that match the documented verification path
- a contract file that declares setup, tasks, execution, and safety rules
If your README currently carries everything, the first step is to move the operational burden into a smaller, more structured section or file. A lightweight manual version might look like this:
## Working with this repo
Runtime:
- Python 3.12
- Poetry
- Postgres 16
Setup:
1. Install dependencies: `poetry install`
2. Copy `.env.example` to `.env`
3. Start services: `docker compose up -d`
Verification:
- Unit tests: `poetry run pytest tests/unit`
- Full check: `poetry run pytest --cov`
Agent guidance:
- Safe to run: tests, lint, typecheck
- Do not run: deploy, publish, destructive database commands
- Do not edit: `.env`, generated files, production config
This is already better than forcing contributors or agents to guess.
But it is still prose. It can still become stale.
The next step is to make repo readiness executable, reviewable, and reusable by humans, CI, and AI agents.
Where Ota fits
This is where Ota becomes useful.
Ota does not replace the README. It removes the pressure for the README to behave like an execution system.
Ota is open repo-readiness infrastructure for humans and AI agents. Its docs describe repo readiness as the state of a repo being runnable and diagnosable, so the next safe step is obvious. It also treats ota.yaml as the repo-level source of truth for readiness, setup, execution, and safe AI-agent guidance.
Instead of asking humans, CI, and agents to reconstruct setup from scattered README prose, Ota lets the repo declare its working state in an explicit contract.
That contract can describe what the repo needs, which tools are expected, which tasks exist, how setup should happen, what is safe for agents to run, and what should be verified after changes.
The README can still explain the project.
But the contract carries the operational truth.
- ota doctor checks whether the repo is ready and points to the blocker
- ota validate checks whether the contract itself is valid
- ota tasks shows the work the repo has declared
- ota up prepares the repo from that contract
AI agents do not need more scattered hints. They need a reliable path.
The better model
The future is not README versus tools.
It is README plus explicit repo readiness.
The README remains the human-friendly front door. It explains the project, purpose, architecture, and contribution path.
Setup, execution, verification, environment requirements, and agent-safe boundaries should live in a form that can be reviewed, validated, and reused.
That is the shift:
Old model:
Read the README and figure it out.
Better model:
Read the README for context. Trust the repo contract for how work runs.
This reduces onboarding friction, narrows local versus CI drift, and helps agents avoid confident guessing.
Conclusion
READMEs are still important.
The issue is not that READMEs are bad. The issue is that many teams ask them to carry too much operational weight.
As AI agents become part of software workflows, repo ambiguity becomes harder to ignore. Agents need clear context: runtimes, services, tasks, safe commands, protected paths, and verification rules.
The better question is no longer, “Does this repo have documentation?”
It is:
Can this repo explain how it works clearly enough for a human, CI system, or AI agent to trust it?
If the answer is no, the README is not the enemy.
It is just carrying too much weight.
Continue reading
- Check out Repo Readiness for AI Agents: The Complete Guide
- Explore the Ota GitHub guide
- Check the Ota examples repo for practical contract examples.
Top comments (0)