---
title: "01 — What Is Claude Code? — An Agent That Lives in the Terminal"
uid: what-is-claude-code
tags: ["roadmap:claude-code", "ai", "cli", "agentic", "claude-code", "fundamentals"]
excerpt: "An LLM inside a loop with tools that can touch real files and shell — that loop is the whole 'AI coding tool' category, and its failure modes follow from its shape."
date: 2026-08-13T03:28:23+0000
source: https://www.aveshina.my.id/en/blog/what-is-claude-code
---

"Autocomplete but bigger" was how I first understood Claude Code, and the phrase hid the actual mechanism. The model that held: **Claude Code is a large language model put inside a loop, with tools that can touch my real files and shell.** [1] Once I could see the loop, "AI coding tool" stopped being a vague category and became a specific shape with specific failure modes.

The framing that clicked is the contrast with autocomplete. The suggestions I get while typing in an editor predict the next few tokens from the lines above. They never run, never read a second file, never recover from their own mistakes. Claude Code is a different artifact entirely: it sits in my terminal, holds a goal across many rounds, calls tools to act on the project, and only stops when the goal is met or I tell it to [1][2]. The jump is not "smarter text" — it's *agency*, the ability to act and observe the result before deciding the next step.

## Vibe coding: the cultural frame, not the technology

The roadmap leads with a term that's worth pinning down because it gets thrown around loosely: **vibe coding**. Coined by Andrej Karpathy, it's a style of development where the human writes natural-language prompts and an AI agent generates, builds, and iterates the application — the focus is the overall intent (the "vibe"), often with rapid prototyping and minimal manual line-editing [3].

I keep this separate from "what Claude Code is" because they answer different questions. Vibe coding is a *workflow* humans adopt; Claude Code is a *tool* that enables it. You can use the tool without vibe coding (I do — most of my sessions are careful, review-heavy edits), and you can vibe code with other tools. Conflating them is how people end up disappointed: they expect the tool to magically produce a working app from a vague prompt, when what it actually does is run an agentic loop whose quality depends entirely on how precisely I steer each turn.

## A coding agent, not a chatbot

The next rung of clarity was seeing Claude Code as a **coding agent** — an AI entity designed to autonomously write, test, and debug code to solve a task [4]. "Autonomously" is the load-bearing word, and I had to be careful with it. It doesn't mean "unsupervised." It means: within a turn, the agent decides its own sequence of actions — which files to read, which commands to run, which edits to make — instead of waiting for me to spell out each one.

The difference shows up the moment I issue a prompt. A chat assistant would *describe* what to do ("you should open lib/auth.ts, check the token refresh logic, and…"). An agent *does* it: it reads the file, runs the typechecker, sees the error, edits, re-runs. I stop being the relay between thought and action. That's the qualitative change, and it's also where the new risks live — because the agent's mistakes are no longer text on a screen, they're actions in my actual repository [4].

## The agentic loop: the one shape to remember

Everything above reduces to one mechanism: the **agentic loop** [5]. The agent continuously cycles through perception, planning, and action. It observes its surroundings (the goal, plus whatever the last tool returned), decides on a course of action based on its goals and current state, executes that action, and then observes the results to inform the next decision. This iterative process is what lets it adapt when a command fails or a file looks different than expected.

```figure
<svg viewBox="0 0 740 300" xmlns="http://www.w3.org/2000/svg" class="my-6 w-full max-w-2xl" role="img" aria-label="The Claude Code agentic loop. A central box labelled Model sits in the middle. Three nodes in a clockwise circle around it: Perceive (read goal + last tool result) at top-left, Decide (choose next tool or stop) at top-right, Act (run a tool like Read, Edit, Bash) at the bottom. Arrows chase clockwise forming a repeating loop. A dashed arrow exits to the right labelled done: return control to the user.">
  <defs>
    <marker id="ccloop" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto">
      <path d="M0,0 L10,5 L0,10 z" fill="#64748b"/>
    </marker>
    <marker id="ccexit" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto">
      <path d="M0,0 L10,5 L0,10 z" fill="#db2777"/>
    </marker>
  </defs>
  <g font-family="ui-sans-serif, system-ui, sans-serif" text-rendering="geometricPrecision">
    <rect x="300" y="120" width="140" height="60" rx="10" fill="#e0e7ff" stroke="#6366f1" stroke-width="1.8"/>
    <text x="370" y="146" font-size="14" font-weight="700" fill="#1e1b4b" text-anchor="middle">Model</text>
    <text x="370" y="164" font-size="10" fill="#475569" text-anchor="middle">same LLM, every turn</text>

    <rect x="110" y="50" width="170" height="54" rx="8" fill="#fef9c3" stroke="#ca8a04" stroke-width="1.5"/>
    <text x="195" y="74" font-size="13" font-weight="700" fill="#422006" text-anchor="middle">1 · Perceive</text>
    <text x="195" y="92" font-size="10" fill="#475569" text-anchor="middle">goal + last tool result</text>

    <rect x="460" y="50" width="170" height="54" rx="8" fill="#fce7f3" stroke="#db2777" stroke-width="1.5"/>
    <text x="545" y="74" font-size="13" font-weight="700" fill="#500724" text-anchor="middle">2 · Decide</text>
    <text x="545" y="92" font-size="10" fill="#475569" text-anchor="middle">next tool, or stop</text>

    <rect x="285" y="220" width="170" height="54" rx="8" fill="#dcfce7" stroke="#16a34a" stroke-width="1.5"/>
    <text x="370" y="244" font-size="13" font-weight="700" fill="#052e16" text-anchor="middle">3 · Act</text>
    <text x="370" y="262" font-size="10" fill="#052e16" text-anchor="middle">Read · Edit · Bash · …</text>

    <path d="M280,77 C340,77 380,77 458,77" fill="none" stroke="#64748b" stroke-width="1.5" marker-end="url(#ccloop)"/>
    <path d="M545,104 C545,150 480,200 458,222" fill="none" stroke="#64748b" stroke-width="1.5" marker-end="url(#ccloop)"/>
    <path d="M285,247 C210,247 195,200 195,104" fill="none" stroke="#64748b" stroke-width="1.5" marker-end="url(#ccloop)"/>

    <path d="M440,150 C500,150 560,150 620,150" fill="none" stroke="#db2777" stroke-width="1.5" stroke-dasharray="5,4" marker-end="url(#ccexit)"/>
    <text x="530" y="142" font-size="10" font-weight="700" fill="#db2777" text-anchor="middle">done · stop</text>
  </g>
</svg>
```

The reason this matters: **acting changes the world the model sees next.** A chat answer is frozen the moment it's written. In the loop, the round-three answer can be shaped by what a tool returned in round two — a real error, a real file's contents, a real test failure. The model isn't predicting in a vacuum; it's reacting to ground truth it just produced [5].

## Setting it up

The mechanics are deliberately boring — that's a feature. One install command, one login, and it runs [6]. On macOS, Linux, or WSL:

```
curl -fsSL https://claude.ai/install.sh | bash
```

Windows users run the PowerShell equivalent (irm https://claude.ai/install.ps1 | iex). Then I cd into any project and type claude. The first launch triggers a one-time login — either a Claude account (Pro/Max subscription) or an Anthropic Console API key. After that, the tool is ready immediately [6]. There's no separate plugin to install in my editor unless I want the IDE integration; the terminal is the canonical surface.

## How I use this

The habit these notes left me with is a single check before I open a session: *does this task need a loop, or a turn?* If the next step depends on the result of the last — read the error, fix it, re-run — the agent earns its keep. If it's a one-shot explanation, plain chat is cheaper and safer. Seeing Claude Code as a loop with hands (not a smarter autocomplete, not a magic app-generator) is what made my sessions predictable: I steer the loop, I scope the tools, I watch the actions, and I stop it when it drifts.

## References

[1] Anthropic, "Claude Code overview," Claude Code Docs, 2025. [Online]. Available: [https://code.claude.com/docs/en/overview](https://code.claude.com/docs/en/overview)

[2] Anthropic, "How Claude Code works," Claude Code Docs, 2025. [Online]. Available: [https://code.claude.com/docs/en/how-claude-code-works](https://code.claude.com/docs/en/how-claude-code-works)

[3] IBM, "What is vibe coding?," IBM Think Topics, 2025. [Online]. Available: [https://www.ibm.com/think/topics/vibe-coding](https://www.ibm.com/think/topics/vibe-coding)

[4] IBM, "What are AI agents?," IBM Think Topics, 2024. [Online]. Available: [https://www.ibm.com/think/topics/ai-agents](https://www.ibm.com/think/topics/ai-agents)

[5] Hugging Face, "What is an Agent Loop?," Agents Course, 2025. [Online]. Available: [https://huggingface.co/learn/agents-course/en/unit1/agent-steps-and-structure](https://huggingface.co/learn/agents-course/en/unit1/agent-steps-and-structure)

[6] Anthropic, "Getting started with Claude Code," Claude Code Docs, 2025. [Online]. Available: [https://code.claude.com/docs/en/quickstart](https://code.claude.com/docs/en/quickstart)

```quiz
Q: What is the core difference between editor autocomplete and Claude Code?
- Autocomplete predicts tokens; Claude Code runs an agentic loop with tools that act on real files and shell
- Claude Code uses a larger model but otherwise works the same way
correct: 0
explain: Autocomplete predicts the next few tokens from context and never runs anything. Claude Code holds a goal across rounds, calls tools to act on the project, and observes the results before the next step.

Q: "Vibe coding" is best described as…
- a workflow where humans prompt an AI agent to generate and iterate an app, focusing on intent
- the underlying model architecture that powers Claude Code
correct: 0
explain: Vibe coding (coined by Karpathy) is a development style, not a technology. Claude Code is a tool that can enable it, but the two aren't the same thing.

Q: In the agentic loop, why does acting change what the model "sees" next?
- Because the tool's return value becomes the next observation the model reasons over
- Because the model is retrained after each action
correct: 0
explain: A tool result — an error, a file's contents, a test failure — is fed back as the next observation. The model reacts to ground truth it produced, rather than predicting in a vacuum.

Q: What does "autonomous" mean when describing Claude Code as a coding agent?
- It runs without any human involvement at all
- Within a turn, it decides its own sequence of actions rather than waiting for step-by-step instructions
correct: 1
explain: "Autonomous" describes how the agent picks its own actions inside a turn — not that it's unsupervised. Steering, scoping tools, and stopping it are still my job.

Q: After installing the CLI, what triggers the one-time login?
- Typing `claude` inside a project directory for the first time
- Opening a pull request on GitHub
correct: 0
explain: Running `claude` in a project launches the one-time login (Claude account or Anthropic Console API key). After that the tool is ready immediately.
```
