For users of Claude Code, either the Desktop panel or the CLI (claude). You delegate coding tasks to an agent that reads files, runs commands, edits code, and iterates. The token economics differ meaningfully from chat, and the failure modes are sharper.

How Claude Code is different

Where chat is one user message in, one assistant response out, Claude Code runs agentic loops. A single instruction like "implement OAuth login on the staging environment" can trigger dozens of internal sub-turns: read this file, run that command, parse the output, decide what to do next, edit a file, re-run the test, read the error, etc. Each of those sub-turns sends the full accumulated context and adds its own results back into the conversation history.

Diagram: one user turn becomes N internal turns

flowchart TB
    User([User instruction:<br/>'implement OAuth login on staging'])
    User --> T1[Internal turn 1<br/>Read auth.py]
    T1 --> T2[Internal turn 2<br/>Run grep on session middleware]
    T2 --> T3[Internal turn 3<br/>Edit auth.py with JWT logic]
    T3 --> T4[Internal turn 4<br/>Run tests, parse failure]
    T4 --> T5[Internal turn 5<br/>Read failing test fixture]
    T5 --> T6[Internal turn 6<br/>Fix fixture]
    T6 --> T7[Internal turn 7<br/>Re-run tests]
    T7 --> TN[… Turn N …]
    TN --> Result([Final response to user])
    style User fill:#dbeafe
    style Result fill:#dcfce7

Each arrow represents one full payload transmission. The context envelope grows at every step because every tool result (grep output, file content, error trace, test result) gets added to the conversation history and travels forward on every subsequent step.

The implications are immediate:

Three pressures, not two

Claude Code users face all three of:

The CLI commands that matter

The CLI gives you direct levers the Desktop panel does not. If you use Claude Code seriously and you are not in the CLI, you are leaving most of your control on the table.