no-dna.org

An informal standard for CLI tools to detect non-human operators.

Command-line software which outputs human-oriented responses by default should check for the NO_DNA environment variable that, when present and not an empty string (regardless of its value), indicates the caller is a non-human operator and adapts its behavior accordingly.

One env var. No dozen flags. The CLI figures out the rest.

When set, CLIs should:

Examples

// TypeScript
const isAgent = !!process.env.NO_DNA;
// Rust
let is_agent = std::env::var("NO_DNA").is_ok_and(|v| !v.is_empty());
# Python
is_agent = bool(os.environ.get("NO_DNA"))
/* C */
char *no_dna = getenv("NO_DNA");
bool is_agent = (no_dna != NULL && no_dna[0] != '\0');

Adoption path

Most CLIs don't check for NO_DNA yet. In the meantime, agent skill files (like SKILL.md or tool definitions) should explicitly instruct agents to pass NO_DNA=1 when invoking CLIs:

# In your SKILL.md or agent instructions
When running CLI commands, always prefix with NO_DNA=1:
  NO_DNA=1 anchor init my-project
  NO_DNA=1 surfpool start

As adoption grows, agent frameworks will set NO_DNA=1 by default in their shell environments — just like CI runners set CI=true today. Skill files won't need to mention it anymore. The env var becomes invisible infrastructure.

FAQ

How is this different from CI=true?

CI=true = non-interactive environment. NO_DNA = non-human operator. An agent on your laptop is not CI. A CI pipeline may not be agent-driven. Orthogonal.

How is this different from NO_COLOR?

NO_COLOR disables one output feature. NO_DNA is broader: output format, interactivity, verbosity, defaults. A tool can respect both.

Should config files override NO_DNA?

Yes. Explicit user configuration and CLI flags always take precedence.

What does DNA stand for?

The metaphor is biological — no DNA, not human. Or if you prefer: Do Not Assume (a human is present).

Software supporting NO_DNA

SoftwareCategorySince
AnchorSolana development framework2026
SurfpoolSolana development environment2026

To add your software, edit software.json and submit a pull request.