There's a legitimate architectural question about Claude Code: is Anthropic's terminal-based coding tool an AI agent, or a harness that runs agents?
Both terms get used casually, but they describe different things. An agent is autonomous - it has a goal, takes actions (reading files, running commands, writing code), observes results, and adjusts. A harness is the scaffolding around that: it manages tool access, maintains context, handles permissions, and can coordinate multiple agents working in parallel.
Claude Code qualifies as both, depending on where you're looking.
From the outside, it behaves like an agent. You give it a task - "add tests for this authentication module" - and it figures out the steps: reads the relevant files, identifies existing patterns, writes the tests, runs them, and fixes what fails. You don't direct each step.
From the inside, it's a harness. The Claude model making decisions is the agent. Claude Code - the CLI, the permission system, the hook architecture, the ability to spawn sub-agents to handle parallel tasks - is the scaffolding containing and directing that agent. When you configure file access restrictions or require approval before shell commands run, you're configuring the harness, not the agent.
The Practical Difference
This distinction changes three things.
First, what you trust versus what you configure. Treating Claude Code as an agent means evaluating whether its decisions are good. Treating it as a harness means evaluating whether it's properly constrained. Both matter, but they point to different places: settings file permissions and hook configuration on the harness side; prompt quality and context management on the agent side.
Second, multi-agent workflows. Claude Code can spawn sub-agents to work on tasks in parallel - one reading documentation while another writes code. In that setup, Claude Code is clearly the harness. Understanding this changes how you design complex workflows and where you put guardrails.
Third, debugging. When something goes wrong, the fix is different depending on whether the failure was an agent decision or a harness configuration issue. Most failures in practice are harness problems - the model made a reasonable decision given what it could see, but the surrounding scaffolding gave it the wrong context or access.
The most useful way to think about it: Claude Code ships as a harness with an agent built in. For simple tasks, that distinction doesn't matter. For production workflows and anything involving multiple agents, it's the difference between knowing what to tune and guessing.