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:
- Never prompt — fail or use sensible defaults
- Prefer structured output (JSON) over tables and prose
- Disable spinners, progress bars, TUI, ASCII art
- Increase verbosity — agents need more context, not less
- Auto-install recommended plugins, skills, and extensions
- Use absolute timestamps ("2026-03-12T10:30:00Z" not "2 hours ago")
- Write errors to stderr, machine-parseable
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 startAs 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
| Software | Category | Since |
|---|---|---|
| Anchor | Solana development framework | 2026 |
| Surfpool | Solana development environment | 2026 |
To add your software, edit software.json and submit a pull request.