AI DevelopmentDecision Matrix16 min readPublished August 24, 2026

9 CLIs · 4 dimensions · “not documented” is a finding, never a guess

AI CLI First-Run Traps: A Date-Pinned Nine-CLI Census

Nine AI coding CLIs, four first-run dimensions: folder-trust prompts, telemetry consent, mid-task keystrokes, and what gets written outside your project before you choose anything. Every cell traces to a source read on August 24, 2026 — and where the vendor documents nothing, the cell says so instead of guessing.

DA
Digital Applied Team
Senior strategists · Published Aug 24, 2026
PublishedAug 24, 2026
Read time16 min
SourcesDocs, trackers, write-ups
Trust prompts confirmed
5/9
one single-sourced from a tutorial
Trust gate shipped off
1
Qwen Code — disabled by default
aider prompt default
[Yes]
a reflexive Enter opts you in
Fully undocumented
1
Kimi CLI — all four dimensions

The AI CLI first run is the one moment where you have made no deliberate choice at all — and it is exactly where coding agents differ most. Before your first real prompt, a CLI may have asked you to trust a folder, defaulted a telemetry answer, written a device-identifier file to your home directory, and decided what the Enter key does while an agent is mid-task. This census pins down those behaviours for nine CLIs, each cell tied to a source read on August 24, 2026.

The stakes are concrete. A confirmed Cursor CLI flaw let a hostile repository execute arbitrary commands before the trust prompt ever appeared. aider’s opt-in analytics prompt brackets its default as [Yes], so the reflex keystroke that dismisses every other dialog opts you into telemetry. And pressing Enter while an agent works queues your message in one CLI and interrupts the turn in another — the same key, opposite defaults.

Just as important is what could not be established. For several of these tools, a security-conscious adopter cannot determine from the vendor’s own documentation what happens on first run. That gap is not padding to hide — it is a headline result of this census, and it gets its own section and its own column value below.

Key takeaways
  1. 01
    Enter means yes at the one prompt whose default is documented.Across the nine CLIs checked, a folder or workspace trust prompt is confirmed for five. Only Claude Code’s prompt has a documented default option — “Yes, proceed” is highlighted and Enter accepts it; the other four document their prompts without stating where the default lands. Qwen Code documents the mechanics in detail but ships the entire gate disabled.
  2. 02
    The documentation gap is itself a headline finding.ZCode, Kimi CLI, and parts of Gemini CLI’s and Antigravity’s first-run story cannot be established from vendor documentation. This census records those cells as not documented rather than inferring them from a sibling tool.
  3. 03
    Telemetry consent inverts the trust-prompt pattern once.aider frames analytics as opt-in, yet its consent prompt defaults the bracketed answer to [Yes] — a reflexive Enter opts you in. Most other CLIs surface no in-terminal telemetry decision at first launch at all.
  4. 04
    The same keystroke means opposite things mid-task.Claude Code’s documented behaviour is that Enter queues a message while the agent works and Esc interrupts. Codex CLI is reported to do the reverse since Steer Mode became the default: Enter sends immediately and interrupts, Tab queues.
  5. 05
    State lands outside your project before you decide anything.Every CLI that documents its storage writes to the home directory on or before first use — session transcripts, history files, trust stores, and in ZCode’s case a device-identifier telemetry file its own docs warn you never to copy between machines.

01Method & ScopeFirst-run behaviour only, and nothing inferred.

This census owns one life-cycle moment: what a CLI does before the user has made a single deliberate choice. Two sibling censuses already cover the neighbouring territory, and this post cross-links them rather than restating them. Headless and unattended permission defaults — what happens when nobody answers a prompt — belong to the headless-permissions census. Retention windows, training defaults, and opt-out mechanics belong to our census of what each vendor’s data terms actually say. Here, we only note that a toggle exists and how it is surfaced at first launch.

Four dimensions were checked for each CLI: the folder or workspace trust prompt (wording, default option, what it gates), telemetry and terms-of-service consent mechanics at first launch, composer behaviour when you type while the agent is already working, and what gets written to disk outside the project directory. The discipline is borrowed from the same dated-source-or-nothing method we used for the SSRF-validation census: every cell traces to a dated source retrieved on August 24, 2026, and any cell that could not be settled from those sources reads “not documented” — never a guess extrapolated from a sibling tool’s behaviour.

Why this matters
The first run is when a CLI’s defaults act for you. A trust prompt you Enter through, a telemetry answer pre-filled, a session transcript written to your home directory — all of it happens before the first task. Reading the vendor’s own account of that moment is the cheapest security review you will ever do. When there is no account to read, that absence is the review’s finding.

02The CensusThe first-run matrix, nine CLIs across four dimensions.

The matrix below is the census. Rows are grouped by how much of the first-run story the vendor actually documents, leading with the CLIs whose behaviour is established from primary sources. A cell marked “Not documented” means the dimension could not be settled from the vendor’s documentation or public trackers in this pass — it does not mean the mechanic is absent.

First-run behaviour of nine AI coding CLIs as of August 24, 2026, grouped by documentation coverage: folder-trust prompt, telemetry consent at first launch, mid-task Enter behaviour, and state written outside the project directory. Cells that could not be established from vendor documentation read “not documented.”
CLIFolder-trust promptTelemetry / consent at first launchMid-task EnterWritten outside the project
Documented from primary sources
Claude Codegithub.com/anthropics/claude-code #6797allaboutcoding.ghinda.com · session storageghuneim.us · telemetry write-up“Do you trust the files in this folder?” — “Yes, proceed” is the highlighted default, Enter accepts. Re-firing for already-trusted directories reported on some setups.No in-terminal consent step; terms are accepted through the browser-based /login flow. Telemetry defaults are platform-dependent — off on Bedrock, Vertex, and Foundry per a June 2026 independent write-up.Queues the message; Esc interrupts and sends the queue (official docs).~/.claude — cross-session history and per-project transcripts; relocatable via CLAUDE_CONFIG_DIR.
Codex CLIgithub.com/openai/codex #9696majesticlabs.dev · config.toml guideallaboutcoding.ghinda.com · session storage“Since this folder is version controlled, you may wish to allow Codex to work in this folder without asking for approval.” Choosing the request-approval option silently disables project skills.No first-run consent prompt documented. Telemetry config is user-level only — a cloned project cannot flip it for you.Sends immediately and interrupts; Tab queues — reported as the default since Steer Mode shipped on, single-sourced.~/.codex — trust state in config.toml, per-session rollout files, history; relocatable via CODEX_HOME.
Cursor CLIforum.cursor.com · workspace-trust threadmanifold.security · pre-trust executionallaboutcoding.ghinda.com · session storage“Trust this workspace” prompt on a new repo; a --trust flag records the same decision in interactive sessions as of the 2026-07-20 release. A pre-trust code-execution flaw was fixed in 2026.07.23-e383d2b.Not documented.Not documented.~/.cursor/chats/<id>/<uuid>/store.db session store.
Qwen Codeqwen-code-docs · trusted-foldersDialog exists but the gate ships disabled — security.folderTrust must be enabled in settings first; with the shipped default, no dialog appears and no untrusted-mode restrictions apply.Not documented (first-run consent mechanics).Not documented.~/.qwen/trustedFolders.json once the trust feature is enabled.
aideraider.chat/docs/more/analyticsNone documented.Opt-in analytics prompt with a bracketed [Yes] default — Enter opts you in. Only a random subset of installs is ever asked; declining disables analytics permanently.Not documented.Not documented in this pass.
Partially documented
Gemini CLIgemini-cli docs · tos-privacyNot documented — no first-launch consent screen is established in the docs reviewed.“Usage Statistics” is a single switch whose meaning branches by account type; the OTEL export pipeline defaults off, but the pre-branching collection default is not documented.Not documented.Not documented for the CLI itself.
Antigravity CLIantigravity.google/docs/cli/using“Do you trust the contents of this project?” in a first-run setup walkthrough — single-sourced from a tutorial, not Google’s own docs page.No clean telemetry-vs-training separation documented for consumer-tier use, per a third-party reading of the terms.Not documented.~/.gemini/antigravity-cli/settings.json (vendor-confirmed).
Not documented by the vendor
ZCodezcode.z.ai/en/docs/qaNot documented.Collection default not documented. A persisted device-identifier telemetry file is confirmed by the vendor’s own FAQ.Not documented.~/.zcode/v2/telemetry-state.json — the FAQ warns it must never be copied between machines.
Kimi CLIkimi-cli · getting-startedNot documented.Not documented — the getting-started flow is /login then an optional /init, with no consent step described.Not documented.Not confirmed from primary sources; a config-migration mechanic from the older Kimi CLI exists, exact path unconfirmed.

Counting across the matrix: a folder or workspace trust prompt is confirmed for five of the nine CLIs — Claude Code, Codex CLI, Cursor CLI, Qwen Code (where the gate ships disabled), and Antigravity (single-sourced). One CLI ships its trust gate off by default, one carried a now-patched pre-trust code-execution flaw, and one — Kimi CLI — has no first-run mechanic confirmed from primary sources on any of the four dimensions.

First-run documentation coverage · 9 CLIs · August 24, 2026

Compiled from vendor docs, public trackers, and dated third-party write-ups, retrieved 2026-08-24
CLIs checkedFour first-run dimensions each
9 of 9
Folder-trust prompt confirmedClaude Code · Codex · Cursor · Qwen Code · Antigravity
5 of 9
Trust gate shipped disabledQwen Code — security.folderTrust off by default
1 of 9
Pre-trust code-execution flaw (patched)Cursor CLI — .cursor/worktrees.json, fixed in 2026.07.23-e383d2b
1 of 9
No first-run dimension documentedKimi CLI — trust, telemetry, ToS, storage all unestablished
1 of 9

03Headline FindingThe documentation gap is the finding.

The most important result of this census is not any single trap — it is that for several of these tools, a security-conscious adopter cannot determine, from the vendor’s own documentation, what the tool does on first run. That is worth stating plainly because the temptation in comparison content is to paper over unknowns with plausible guesses borrowed from a sibling tool. We did the opposite: absence of documentation is recorded as data.

What was searched: for ZCode, the vendor’s documentation site including its welcome and FAQ pages; for Kimi CLI, the official getting-started guide plus release coverage; for Gemini CLI, the terms-of-service and privacy notice plus the telemetry and observability documentation; for Antigravity, Google’s own CLI usage page plus tutorial coverage. All retrieved August 24, 2026.

ZCode
Only a telemetry file is certain
~/.zcode/v2/telemetry-state.json

The vendor FAQ confirms a persisted device-identifier telemetry file and warns against copying it between machines. Whether collection defaults on or off, whether a trust prompt exists, and whether a ToS step appears at first launch are all undocumented.

zcode.z.ai docs — searched 2026-08-24
Kimi CLI
All four dimensions undocumented
/login → /init is the whole documented flow

The getting-started guide covers OAuth or API-key login and an optional AGENTS.md generation step. No trust prompt, telemetry default, ToS mechanic, or config path appears — an honest gap, not a claim that no such mechanics exist.

moonshotai.github.io/kimi-cli — searched 2026-08-24
Gemini CLI
Consent screen not established
One switch, meaning branches by account

The docs define what Usage Statistics collects per account type and show the OTEL export defaulting off — but whether an explicit consent screen appears at first launch, and what the pre-branching default is, could not be established.

google-gemini.github.io docs — searched 2026-08-24

The trend this reveals is uncomfortable for the category: first-run behaviour is treated as an implementation detail rather than a contract. Vendors document their settings surface exhaustively once you are inside the tool, but the moment where defaults act on your behalf — before any setting has been read — is the least-described moment in the product. The tools with the most mature trust documentation, Qwen Code among them, are not necessarily the ones with the safest defaults; Qwen documents its trust mechanics in detail while shipping the entire gate disabled.

Projecting forward, we expect this gap to close the way the permission-defaults gap did: through incident write-ups rather than proactive documentation. Cursor’s pre-trust execution flaw produced more public detail about its first-run sequence than its own docs had — a pattern worth assuming will repeat. Until then, the practical rule is simple: a CLI whose first-run behaviour is undocumented should be treated as untrusted by default, run first in a throwaway directory on a clean git tree.

04Trust PromptsWhere the trust gate is real, and what it gates.

Claude Code’s prompt is the canonical shape: “Do you trust the files in this folder?” with “Yes, proceed” highlighted and Enter confirming it. Two public issues document the prompt re-firing for the same directory on certain setups — an annoyance that trains exactly the wrong reflex, since a prompt you have dismissed five times is a prompt you stop reading. Anthropic’s terms consent, meanwhile, is not an in-terminal step at all: it rides the browser-based /login flow, and a terms update can block CLI use with an error directing you to accept on the web first.

Codex CLI’s prompt leads with reassurance — “Since this folder is version controlled, you may wish to allow Codex to work in this folder without asking for approval” — and hides a genuine side effect: selecting the cautious request-approval option silently disables loading custom skills from the project’s .codex/skills directory, an undocumented consequence surfaced only through a community issue. Trust state lands in ~/.codex/config.toml, and an untrusted project’s local config, hooks, and rules are ignored entirely.

Qwen Code is the inversion: the most thoroughly documented trust model in the census — a four-option dialog, a central ~/.qwen/trustedFolders.json store, an explicit priority order — attached to a gate that ships disabled. Unless you enable security.folderTrust yourself, no dialog appears and none of the untrusted-mode restrictions apply. Most secondary coverage of Qwen’s trust mechanics misses that the default state is off.

The pre-trust execution flaw
The trust prompt is only a boundary if nothing runs before it. Manifold Security’s July 2026 disclosure showed cursor-agent versions up to and including 2026.07.01-41b2de7 executing repository-supplied commands from .cursor/worktrees.json the moment the CLI started with -w — before the workspace-trust prompt appeared. In the researchers’ words: “A repository could execute any command it chose on your machine, as you, the moment you started Cursor’s CLI agent in it with -w.” The fix shipped in 2026.07.23-e383d2b, gating the worktree setup behind the trust prompt; a structurally similar .cursor/mcp.json flaw had been disclosed in 2025. If you run agents across worktrees, our guide to running multiple agent CLIs against git worktrees covers the isolation side of the same surface.

05Telemetry ConsentThe consent prompt that defaults to yes.

aider is the clearest documented instance of the Enter-accepts-consent pattern in this census — and, to its credit, the most transparent about its analytics model overall. The docs state that analytics are collected only if you agree and opt in, and that code, prompts, chats, and keys are never collected. But the prompt itself brackets its default as [Yes]:

"Allow collection of anonymous analytics to help improve aider? (Y)es/(N)o [Yes]:"— aider CLI, first-enablement prompt, as quoted in the project’s analytics documentation

A reflexive Enter — the keystroke every other dialog in a terminal workflow has trained — opts you into telemetry inside a flow the documentation frames as opt-in. Two mitigating details: declining permanently disables analytics for that install, and only a randomly selected subset of users is ever asked at all, which means most aider first runs never surface a telemetry decision in either direction. Session and permanent flags (--no-analytics, --analytics-disable) exist for scripted setups.

Elsewhere the pattern is not a prompt but an absence of one. Claude Code surfaces no in-terminal telemetry decision; a June 2026 independent write-up documents a family of environment variables that disable analytics, error reporting, and non-essential traffic — we have not re-verified that list against the current settings reference, so treat the specifics as that write-up’s account rather than settled fact. The same write-up notes two structural details worth knowing regardless: opting out of telemetry stops Claude Code fetching remote experiment gates, which can change available features, and the WebFetch domain-safety check keeps sending hostnames to Anthropic regardless of telemetry settings.

Codex CLI ignores the telemetry key in project-local config entirely — the setting must live at user level, so a cloned repository cannot flip telemetry for the people who clone it. And consent at first login can be broader than the CLI itself: on individual ChatGPT plans, content may be used for training unless you opt out via the account-level privacy portal — a separate toggle from anything the CLI shows you. The retention and training specifics belong to the data-terms census linked above; the first-run point is that signing in is itself a consent event that happens outside the terminal. A reported opencode issue makes the same point from the other side: a user found that setting the documented sharing and OpenTelemetry off-switches did not fully stop the CLI connecting to remote hosts as of the issue’s filing in December 2025 — its resolution status as of this census date is not confirmed.

06The Enter-Key InversionOne keystroke, opposite defaults.

No dimension in this census shows the category’s lack of shared convention more cleanly than what Enter does while an agent is already working. Claude Code’s documentation is explicit: “Type a message and press Enter while Claude is working. Claude Code queues the message instead of interrupting the turn.” Esc is the documented interrupt. That behaviour predates the current docs — a March 2026 issue shows the docs of that era claiming Enter interrupts while the actual behaviour, already at v2.1.79, was to queue.

Codex CLI is reported to default the other way. Since Steer Mode — mid-turn message steering — is reported to have shipped default-on around rust-v0.98.0 (2026-02-05), Enter sends the message immediately and interrupts the current turn, while Tab queues it for after the turn completes. That version-and-date pairing is single-sourced from a secondary aggregation (the primary article returned an error on direct fetch), so treat the exact version as reported rather than confirmed; the behaviour split itself is the durable point. Muscle memory built in one CLI silently misfires in the other: the keystroke that safely queues a follow-up thought in Claude Code kills the in-flight turn in Codex.

What the Enter key does across four documented first-run and mid-task contexts in AI coding CLIs, with the alternate keystroke and the source each behaviour is pinned to.
ContextCLIEnter doesThe alternate keyPinned to
First-run trust promptClaude CodeAccepts “Yes, proceed” — the highlighted defaultSelect “No, exit” insteadPublic issue quoting the prompt text, retrieved 2026-08-24
Telemetry consent promptaiderOpts in — the bracketed default is [Yes]Answering No opts out permanentlyProject analytics docs, retrieved 2026-08-24
Mid-task composerClaude CodeQueues the message for after the turnEsc interrupts, sending the queueOfficial docs; behaviour already true at v2.1.79 per an issue opened 2026-03-19
Mid-task composerCodex CLISends immediately and interrupts the turn (with Steer Mode on)Tab queues for after the turnReported around rust-v0.98.0 (2026-02-05) — single-sourced, secondary aggregation

Read down the third column and the systemic point emerges: the same physical key confirms trust, grants telemetry consent, queues politely, and kills a turn — depending entirely on which tool you happen to be inside. No vendor’s docs would ever assemble this table, because it is inherently comparative and mildly uncomfortable for each of them individually. If you switch between these CLIs daily, a head-to-head of these same terminal tools covers their working styles beyond the first run.

07Disk FootprintWhat lands outside your project before you decide.

Every CLI in this census that documents its storage writes state to the home directory on or before first meaningful use — none of it behind an opt-in. Several of the paths below were verified by an independent six-CLI session-storage comparison published August 6, 2026. The documented footprints:

  • Claude Code creates a hidden ~/.claude directory holding cross-session slash-command history and per-project session transcripts under a flattened-path folder, plus a sessions index. Relocatable via CLAUDE_CONFIG_DIR.
  • Codex CLI writes per-session rollout files under ~/.codex/sessions/ by date, plus history.jsonl — automatically, with no separate opt-in. Relocatable via CODEX_HOME. One public issue reported the session files being created world-readable on Unix; its status as of this census date is not confirmed from the record available.
  • Cursor CLI stores session data in a database at ~/.cursor/chats/; recent versions added archive and delete subcommands for managing it.
  • opencode (adjacent to the nine, checked for storage) keeps sessions in a SQLite database at ~/.local/share/opencode/opencode.db, having migrated from flat JSON as of v1.2.0 in February 2026.
  • ZCode persists ~/.zcode/v2/telemetry-state.json — the vendor’s FAQ warns it “contains a device identifier that must not be shared between machines,” which confirms telemetry state is created outside the project even though the collection default itself is undocumented.

The operational consequence: your prompts and the agent’s outputs live in plaintext transcripts outside the repository, surviving repo deletion and travelling with home-directory backups. Anyone standardising agent tooling across a team should treat these paths as part of the data surface — and note that the relocation variables exist precisely because the defaults put session content somewhere most people never audit.

08Adoption ChecklistThe first ten minutes with any new agent CLI.

The census reduces to a short discipline you can apply to any CLI — including the ones this table does not cover and the versions that ship after it.

Before Enter
Read the prompt you are about to accept

At the one trust prompt in this census whose default option is documented — Claude Code’s — Enter lands on the accept option. Slow down at exactly the dialogs your reflexes want to dismiss — trust prompts and bracketed-default consent questions are the two documented places a reflexive keystroke makes a real decision.

Treat Enter as a signature
First launch
Run it first in a throwaway directory

Cursor’s pre-trust flaw ran repository-supplied commands before the trust prompt appeared. First-launch a new CLI in an empty folder on a clean git tree, watch what it writes to your home directory, then bring it to real code.

Empty folder, clean tree
Undocumented tools
Treat missing docs as an answer

ZCode, Kimi CLI, and parts of Gemini CLI’s first-run story cannot be established from vendor documentation. Do not assume they behave like a better-documented sibling — assume the least convenient answer until the vendor writes it down.

Undocumented = untrusted
Team rollout
Audit the home-directory footprint

Session transcripts, history files, and trust stores live outside the repo and outside most security reviews. Inventory the paths in the section above, decide retention, and use the relocation variables where a managed path is required.

Add ~/.* paths to the review

Two related references round out the configuration surface once you are past the first run: how each CLI’s effort and reasoning controls differ covers the dial you reach for next, and the sibling censuses linked in the method section cover what happens when nobody is watching the prompt at all. For teams adopting agent tooling with governance requirements attached, our AI transformation engagements start with exactly this kind of defaults audit across the fleet a team actually runs.

09ConclusionThe pre-choice moment is the least documented moment.

The census, in one page

Defaults act before you choose — and the vendors write least about exactly that moment.

Nine CLIs, four dimensions, one date. The one trust prompt with a documented default option — Claude Code’s — accepts when you press Enter. One CLI ships the gate disabled outright. One consent prompt defaults its bracketed answer to yes inside a flow framed as opt-in. The same mid-task keystroke queues in one tool and is reported to interrupt in another. And every CLI that documents its storage has already written to your home directory before your first deliberate choice.

The census’s most durable result is the gap: for ZCode and Kimi CLI, and for parts of Gemini CLI and Antigravity, the vendor’s own documentation cannot answer what the tool does at first launch. Recording “not documented” honestly — rather than guessing from a sibling tool — is what makes the established cells trustworthy. It is also a standing request to the vendors: the first run is a contract moment, and it deserves a contract’s documentation.

Everything here is pinned to August 24, 2026. These tools ship weekly; a cell that was true at this census date is a hypothesis, not a fact, by the time you read it. The method survives the versions: read the prompt before Enter, first-launch in a throwaway directory, audit the home-directory footprint, and treat an undocumented first run as the vendor telling you something.

Adopt agent tooling with the defaults audited

Know what your agent tooling does before anyone chooses.

Our team audits and standardises agent tooling for engineering and marketing organisations — defaults, data surfaces, and governance for the CLIs your teams already run — delivered in days, not quarters.

Free consultationExpert guidanceTailored solutions
What we work on

Agent-tooling governance engagements

  • First-run and permission-defaults audits across your CLI fleet
  • Telemetry, consent, and data-surface reviews for agent tooling
  • Team rollout playbooks — trust stores, config, session storage
  • Multi-CLI workflow design — Claude Code, Codex, and beyond
  • Standing re-verification as versions ship
FAQ · First-run census

The questions we get every week.

First-run behaviour is everything a CLI does before the user has made a single deliberate choice: the folder or workspace trust prompt and its default option, telemetry and terms-of-service consent mechanics at first launch, what pressing Enter does while the agent is mid-task, and what gets written to disk outside the project directory. It deliberately excludes two neighbouring topics owned by sibling posts: headless and unattended permission defaults (what a CLI does when nobody answers a prompt) are covered in our coding-agent permission-defaults census, and data-retention windows and training defaults are covered in our data-terms census. This post only notes that a toggle exists and how it surfaces at first launch — the retention and training numbers live in those posts.
Related dispatches

Continue exploring agent tooling defaults.