AI Coding Agents

Read Less Code, Verify More: A Risk-Based Workflow for AI-Generated Software

Direct Answer

You do not need to read every line an AI agent generates. You do need to understand the system, inspect the code where failure is expensive, and collect evidence strong enough for the risk you are accepting.

Theo's useful argument is not "merge code you do not understand." It is that code has become cheap enough to serve a second job. Claude Code, Codex, Grok, and similar agents can generate disposable test clients, custom debuggers, lint rules, load rigs, alternate implementations, and one-off scripts around the production code that still receives careful review. Human attention moves toward contracts, trust boundaries, failure modes, and the gaps that automated evidence cannot close.

Video and argument credit: Theo - t3.gg. Follow @theo on X and watch the original video on YouTube. This article is an independent verification framework built from the video's thesis; it is not sponsored by Theo or any model provider.

JQ AI SYSTEMS take: read less implementation only when you can verify more behavior. If the evidence is weak, the blast radius is large, or the operation is irreversible, human review gets deeper, not lighter.

Source Note

The video and attached transcript are the sources for Theo's code-importance spectrum, his 10,000-line file-organizer example, and his use of generated lint rules, debuggers, compiler hooks, load tests, alternate implementations, and multiple agents as synthetic API users. These are creator examples and engineering opinions, not controlled benchmarks.

The verification recommendations below were checked on 23 July 2026 against the NIST Secure Software Development Framework, NIST's minimum verification techniques, GitHub's guidance for reviewing AI-generated code, and the OWASP Application Security Verification Standard. Tool examples are illustrative; choose equivalents that fit the language, threat model, and organization.

ResourceStatusUse it for
You Need to Read Less CodeTheo videoThe original argument, examples, and importance funnel.
Theo on YouTube / @theo on XCreator creditOriginal commentary and follow-up engineering discussions.
NIST SSDF 1.1Government frameworkSecure development practices, code review and analysis, executable testing, and vulnerability response.
NIST verification guidelinesGovernment guidanceThreat modeling, automated tests, static scans, secret checks, black-box tests, structural tests, historical cases, fuzzing, and dependency review.
Review AI-generated codeGitHub officialFunctional checks, intent, quality, dependencies, AI-specific failures, collaborative review, and CI automation.
OWASP ASVS 5.0Open security standardTurn security requirements into a versioned verification checklist for web applications.
CodeQL code scanningGitHub officialAutomated analysis for supported languages and queryable security rules.
OSS-FuzzGoogle / OpenSSFCoverage-guided fuzzing patterns and scalable crash discovery.
Hypothesis / StrykerTesting toolsGenerate edge cases from properties and test whether the test suite catches deliberate faults.

The Actual Thesis: Make More Cheap Code, Not Cheaper Important Code

The headline sounds like a rejection of code review. The transcript says the opposite for critical software. Theo explicitly keeps hand review for code where a wrong line could cause serious harm. His proposed change is above and around that core: generate far more temporary code that explores assumptions and attacks the implementation before it reaches production.

Old constraintAgent-era opportunityWhat does not change
A one-off debugger could cost hours to build.Generate it for one incident, capture the evidence, then discard it.The production fix still needs review and reproducible proof.
A load test required bespoke clients and coordination.Generate synthetic clients and scenarios in an isolated environment.Cloud access, spend limits, test data, and production impact remain controlled.
Trying three implementations was too expensive.Build all three in temporary branches and run the same acceptance suite.A human still chooses the design and understands the maintenance cost.
Custom lint rules were rarely worth writing.Generate a narrow rule for a recurring project invariant.The rule needs fixtures proving both detections and allowed cases.
API usability was tested by a few humans.Give the interface to several small agents and inspect where they fail.Synthetic agent success does not replace documentation, compatibility tests, or user research.

That distinction matters: disposable code can be abundant; accepted risk cannot. Generated volume is useful only when it increases information about the system.

Four Risk Tiers for Review Depth

Review policy should follow blast radius, reversibility, sensitivity, and detectability, not whether a human or a model typed the code. The model's involvement is an extra risk signal because generated code can contain plausible but incorrect APIs, hidden assumptions, weak tests, unsafe dependencies, or code that satisfies the prompt while missing the real requirement.

TierExamplesMinimum review and evidenceAgent freedom
A: DisposableLocal prototype, throwaway data exploration, synthetic test client, temporary visualization.Run in a sandbox on copies; inspect outputs, commands, file scope, and resource use. No secrets or destructive defaults.High inside a bounded environment. Delete or archive deliberately.
B: Reversible internalAdmin helper, report generator, internal workflow, low-risk automation with rollback.Review interfaces, data access, dependencies, error paths, logs, tests, permissions, and rollback. Pilot with a small group.Moderate. Require approval for writes, sends, and external actions.
C: ProductionCustomer feature, public API, shared library, billing-adjacent workflow, important data processing.Architecture and threat review, direct review of critical paths, unit and integration tests, static analysis, dependency review, staging, observability, canary, and rollback.Bounded. No autonomous merge or deployment solely because an agent says tests passed.
D: High stakesAuth, payments, cryptography, regulated data, safety systems, medical devices, infrastructure control, irreversible migrations.Domain specialists, documented requirements, independent verification, deep source review, formal or regulatory processes where applicable, failure injection, staged release, audit trail, and emergency controls.Use agents as assistants in controlled environments. Human accountability remains explicit.

NIST does not say "choose code review or testing." Its SSDF separates reviewing or analyzing human-readable code from testing executable code. NIST's verification guidance adds threat modeling, static scans, black-box and structural tests, historical cases, fuzzing, web scanning, secret checks, and included-component review. Strong assurance is a portfolio of evidence.

What Humans Still Need to Read

"Read less code" should mean reading a more valuable slice, not losing system understanding. A developer can skip a low-risk function body and still know the contract, data flow, side effects, failure behavior, and operational controls. These are the areas where direct attention earns the most:

Read closelyMachine-check aggressivelyUsually judge by evidence
Public APIs, schemas, function signatures, and compatibility promises.Compilation, type checking, formatting, linting, and deterministic unit tests.Isolated prototypes and temporary visualizations.
Authentication, authorization, secrets, cryptography, money, and privacy boundaries.Static security analysis, secret scanning, dependency review, and policy checks.Generated fixtures, mock data, and synthetic clients.
Database migrations, destructive filesystem work, infrastructure, and deployment changes.Dry runs, migration rehearsal, backups, restore tests, plan diffs, and rollback checks.One-off debuggers and diagnostic dashboards.
Concurrency, retries, idempotency, queues, timeouts, and failure recovery.Race tests, failure injection, load tests, property tests, and runtime metrics.Alternate implementations used only for comparison.
New dependencies, licenses, package provenance, and build configuration.Lockfile checks, vulnerability scans, SBOM or inventory, and reproducible builds.Disposable scripts that never enter the release artifact.
Anything flagged by tests, scanners, reviewers, incidents, or customer impact.Regression cases and historical incident replay.Scaffolding whose only job is to produce inspectable evidence.

Theo gives a useful interface example: he reads API definitions and function signatures because they determine maintainability and future releases, then generates many small clients to see whether less capable models can use the API correctly. The exact ratio is personal. The principle is not.

The Verification Funnel

  1. Write the contract before the implementation. Define inputs, outputs, invariants, prohibited behavior, latency or resource budgets, and a definition of done. Tests derived only after seeing the implementation are more likely to inherit its mistakes.
  2. Classify the risk. Record blast radius, reversibility, data sensitivity, external side effects, and how quickly failure would be detected. The tier decides review depth.
  3. Generate evidence-producing code. Ask for negative tests, boundary cases, a reference implementation, test clients, fuzz targets, a load generator, a debugger, or a migration rehearsal. Keep it isolated from the product path.
  4. Run deterministic gates first. Build, type check, lint, test, scan dependencies and secrets, and run static analysis before asking another model for opinions. GitHub's AI-code review guidance starts with compilation, tests, warnings, and static analysis for the same reason.
  5. Challenge the tests. Property-based testing explores ranges and edge cases. Fuzzing searches for crashes and unexpected behavior. Mutation testing deliberately changes production code and checks whether the suite fails.
  6. Review the critical slice. Inspect contracts, trust boundaries, side effects, error handling, and any code the evidence cannot convincingly cover. For high-risk changes, independent human review remains a gate.
  7. Observe the real system. Release gradually, monitor the business and technical invariants, preserve logs, cap damage, and keep a tested rollback path. Pre-release tests cannot model every production interaction.
A useful stop condition: do not stop because the agent says it is confident. Stop when the agreed checks pass, critical findings are resolved or accepted by an accountable person, residual risk is documented, and rollback has been rehearsed.

Avoid Correlated Mistakes

The weakest version of "code verifies code" is one model writing a feature, inventing tests that match its implementation, running them, and declaring victory. The implementation and tests can share the same misunderstanding. A second model may help, but model diversity alone is not independence.

Prefer evidence with a different origin:

  • Requirement-derived oracles: expected behavior written before the code, ideally with domain-owner examples.
  • Reference implementations: a slower, simpler, already trusted version used for differential tests.
  • Historical cases: production incidents, real edge cases, anonymized fixtures, and known regressions.
  • Properties: invariants that must hold across many generated inputs, such as conservation, ordering, idempotence, or round-trip behavior.
  • Mutation tests: controlled faults that reveal whether assertions are meaningful instead of merely executing lines.
  • Black-box checks: tests through the public interface without relying on implementation details.
  • Static rules: CodeQL, linters, type systems, secret scanners, and policy-as-code checks maintained outside the current prompt.
  • Human challenge: a reviewer who can reject the premise, not just inspect the syntax.

Coverage is useful, but it only shows what executed. Stryker's mutation-testing explanation makes the gap concrete: a line can be covered while a changed condition survives because no assertion actually protects the behavior. The target is not a pretty percentage. It is a suite that fails when the important behavior is wrong.

Turn Theo's 10,000-Line File Organizer Into a Safe Test

Theo describes generating roughly 10,000 lines of JavaScript to organize about 100 assets without reading the implementation. That can be rational for a one-off job, but "it worked" needs a definition. A safe version would require the following:

  1. Create a source manifest with path, size, and hash for every file.
  2. Run against a copy or staging directory, never the only copy.
  3. Default to a dry run that prints the complete move plan.
  4. Restrict all resolved paths to explicit source and destination roots.
  5. Reject overwrites, collisions, symlink escapes, hidden deletions, and unsupported file types.
  6. Execute copies first; verify counts, sizes, and hashes before removing anything.
  7. Run the tool twice and confirm the second run is idempotent.
  8. Sample the resulting organization against human expectations.
  9. Save the plan, logs, and reversal map until the result is accepted.

None of those controls requires reading 10,000 lines. They do require understanding what could go wrong and building observable, reversible evidence around it. That is the mature form of the argument.

Copy-Ready Verification Brief

Act as the verification engineer for this change.

Do not modify production code yet.

Inputs:
- Change summary: [describe the change]
- Acceptance criteria: [list observable outcomes]
- Invariants: [what must always remain true]
- Prohibited outcomes: [data loss, duplicate sends, privilege escalation, etc.]
- Environment: [local, sandbox, staging]
- Risk tier: [A, B, C, or D]

Produce:
1. A concise threat and failure model.
2. The critical interfaces and code paths a human must inspect.
3. Missing unit, integration, end-to-end, negative, and regression tests.
4. At least one independent oracle or differential-testing method.
5. Property-based, fuzz, mutation, load, or failure-injection tests where useful.
6. A disposable harness plan kept outside the production path.
7. Exact commands to run and the evidence each command should produce.
8. A dry-run, rollback, and observability plan.
9. Residual risks that automation cannot resolve.

Constraints:
- Use test data or read-only copies.
- Do not use production credentials.
- Do not deploy, send, delete, purchase, or modify external systems.
- Do not weaken, skip, or delete existing tests.
- Distinguish observed evidence from assumptions.
- Stop and ask for approval before any irreversible or paid action.

Run this brief with the implementation agent, then let a second reviewer challenge the plan. The human owner should approve the invariants and prohibited outcomes before expensive code generation begins.

A Practical Team Policy

PolicyWhy it matters
Every agent change names its risk tier and affected trust boundaries.Review effort follows consequences instead of diff size or model confidence.
Production acceptance criteria are written before implementation.The implementation cannot quietly redefine what success means.
Disposable harnesses run in sandboxes, worktrees, or isolated directories.Exploration cannot accidentally become a release dependency or damage real data.
CI owns deterministic gates; an AI review is advisory.Model commentary does not replace reproducible builds, tests, scans, or required approvals.
Critical tests must have an independent basis.The feature and its tests are less likely to share the same hidden assumption.
No generated command receives broad credentials by default.Least privilege limits the damage from a wrong command or compromised dependency.
Every production change has observability and a tested rollback.Unknown failures can be detected and contained after release.
Delete or own generated scaffolding.Temporary code should not become permanent, unmaintained complexity by accident.

This policy is compatible with Theo's speed argument and with formal secure-development guidance. It does not require every disposable line to receive equal attention. It does require the organization to know what ships, what can act, what evidence supports it, and who accepts the remaining risk.

Bottom Line

Theo is right about the underused opportunity: AI agents should generate far more code than reaches production. Use that surplus for questions that previously were too expensive to ask with software: What breaks under load? Can a novice client use this API? Does the migration reverse cleanly? Which invariant fails on strange inputs? Would a simpler implementation behave the same?

The sober rule is read according to risk, verify according to consequence, and generate according to curiosity. Read the contracts, security boundaries, irreversible operations, and failure paths. Generate the scaffolding that attacks assumptions. Trust neither the implementation nor the test count until independent evidence supports the behavior that matters.

Sources

Common questions

Should developers stop reading AI-generated code?
No. The practical rule is to allocate review depth according to risk. Disposable, isolated experiments can be judged mainly by their outputs. Production interfaces, security boundaries, data migrations, money movement, permissions, concurrency, and irreversible operations still deserve direct human review and stronger independent testing.
What does "verify more code with more code" mean?
It means using cheap generated code for test harnesses, custom lint rules, fuzz targets, load generators, alternate implementations, debuggers, synthetic clients, migration rehearsals, and observability tools. Most of that code is evidence-producing scaffolding, not code that should be merged into the product.
Can the same AI model safely write both the feature and its tests?
It can help, but the tests may repeat the implementation's assumptions. Stronger evidence comes from requirements written before implementation, deterministic oracles, historical cases, property-based and fuzz tests, mutation testing, a different reviewer, and human review of the critical invariants.
Is passing a large test suite enough to trust generated code?
No. A suite can test the wrong behavior, miss security properties, or contain weak assertions. Passing tests should be combined with architecture review, threat modeling, dependency and secret checks, static analysis, negative tests, runtime observability, staged rollout, and a rollback path.
What AI-generated code should always receive deeper review?
Review code that touches authentication, authorization, payments, cryptography, personal or regulated data, infrastructure, deployment, database schemas and migrations, destructive filesystem operations, external dependencies, concurrency, retries, idempotency, safety controls, or anything with a large blast radius.
Where should disposable verification code live?
Keep it isolated from production paths, for example in a temporary worktree, sandbox, or clearly named tools/verification directory. Give it test data or read-only copies, least-privilege credentials, resource limits, and an explicit deletion or retention decision after the question is answered.
Share
X LinkedIn Reddit
Build Yours

Want a system
like this one?

Book a free 30-minute call. We map your situation, identify the highest-impact automation, and figure out if we are a fit.

Book Free 30-min Call