Building Claude Code: Scaling AI-Powered Development from Terminal Prototype to Production

anthropic · Tech · 2024 · source Agentic: yes · promotional bias: med · source-backed · extracted with prompt 0.5.5 (schema v2)

Generated from extraction.json — do not edit by hand. Every claim cites verbatim source evidence; stated means the quote directly asserts the claim, implied means it supports it indirectly.

Problem

Domain: AI-powered software development tools

Anthropic needed to turn a rapidly improving coding model into a production developer tool without overfitting the product to the current model's weaknesses. The hard part was not simply exposing a chat interface; it was finding a form factor, tool surface, planning workflow, feedback loop, and safety envelope that could evolve as the model's coding and tool-use ability changed every few months.

Constraints:

Architecture

Claude Code evolved from a terminal chat app over the Anthropic API into a multi-surface coding agent platform. The core architecture kept a simple CLI/terminal interface, gave the model tools such as bash and file operations, captured project instructions in Claude MD, and added plan mode as a prompt-level guard for specification before execution. As usage matured, the system expanded into recursive sub-agents, Claude Agents SDK automation for code review and production shepherding, log-driven debugging workflows, integrations across desktop, web, mobile, Slack, GitHub, VS Code, and JetBrains, and a Co-work wrapper with VM and permission guardrails for non-technical users. The team treated most scaffolding as temporary: tools and UI behaviors were added, removed, and rewritten as new models made previous compensations unnecessary.

Diagram confidence: reconstructed (reconstructed from prose).

flowchart LR
  claude-code-terminal[Claude Code terminal] --> anthropic-api[Anthropic API]
  claude-code-terminal --> plan-mode[Plan mode]
  claude-code-terminal --> claude-md-instructions[Claude MD instructions]
  claude-code-terminal --> user-feedback-loop[User feedback loop]
  anthropic-api --> tool-use-layer[Tool-use layer]
  tool-use-layer --> bash-tool[Bash tool]
  tool-use-layer --> file-read-and-search-tools[File read and search tools]
  tool-use-layer --> production-diagnostics[Production diagnostics]
  tool-use-layer --> sub-agent-orchestrator[Sub-agent orchestrator]
  claude-md-instructions --> plan-mode
  claude-md-instructions --> tool-use-layer
  plan-mode --> tool-use-layer
  sub-agent-orchestrator --> asana-board[Asana board]
  sub-agent-orchestrator --> log-search-agent[Log-search agent]
  sub-agent-orchestrator --> code-path-agent[Code-path agent]
  sub-agent-orchestrator --> plugin-builder-swarm[Plugin builder swarm]
  asana-board --> plugin-builder-swarm
  user-feedback-loop --> claude-code-terminal
  user-feedback-loop --> plan-mode
  user-feedback-loop --> verbose-mode[Verbose mode]
  verbose-mode --> file-read-and-search-tools
  production-diagnostics --> sentry-reports[Sentry reports]
  production-diagnostics --> production-database[Production database]
  sentry-reports --> production-diagnostics
  claude-agents-sdk-automation[Claude Agents SDK automation] --> development-workflow[Development workflow]
  co-work-wrapper[Co-work wrapper] --> vm-sandbox[VM sandbox]
  co-work-wrapper --> permission-guardrails[Permission guardrails]
Drag to pan · scroll or use +/− to zoom · reconstructed from the source's described component topology

Components

Component Role Interacts with
Claude Code terminal Initial and still-primary developer interface that let Anthropic ship a coding agent without first building a GUI. Anthropic API, Tool-use layer, Plan mode, Claude MD instructions, User feedback loop
Anthropic API Model endpoint used by the prototype and later product surfaces to call Claude. Tool-use layer
Tool-use layer Execution surface through which Claude can run bash, inspect files, operate development tools, and interact with the outside world. Bash tool, File read and search tools, Production diagnostics, Sub-agent orchestrator
Bash tool Early tool that let Claude automate shell, git, Kubernetes, and arbitrary scripts. —
File read and search tools Repository-inspection tools whose output can be summarized or shown verbosely as model reliability and user preference require. —
Claude MD instructions Shared, compact project instruction file used to capture recurring guidance and prevent repeated mistakes. Plan mode, Tool-use layer
Plan mode Prompt-level planning mode that tells Claude not to write code yet, enabling users to iterate on specifications before execution. Tool-use layer
Sub-agent orchestrator Recursive Claude Code topology that spawns child agents with fresh context for parallel search, debugging, and task execution. Asana board, Log-search agent, Code-path agent, Plugin builder swarm
Asana board Task board used by one swarm run to decompose plugin work into tickets that agents picked up. Plugin builder swarm
Log-search agent Example debugging sub-agent assigned to inspect logs in parallel with code-path analysis. —
Code-path agent Example debugging sub-agent assigned to inspect code paths in parallel with log analysis. —
Plugin builder swarm Multi-agent build topology that implemented Claude Code plugins from a spec and task board over a weekend. —
User feedback loop Direct observation, GitHub issues, Slack feedback, and dogfooding process used to identify latent demand and tune features. Claude Code terminal, Plan mode, Verbose mode
Verbose mode Configuration option added after users objected to hidden file and command output. File read and search tools
Production diagnostics Operational debugging path where Claude searches logs, follows code paths, opens tunnels, and inspects production databases. Sentry reports, Production database
Sentry reports Bug-report source whose markdown can seed Claude's debugging workflow. Production diagnostics
Production database Production data source that Claude can inspect through a tunnel during debugging. —
Claude Agents SDK automation Internal automation layer that handles code review, security review, issue labeling, and release shepherding. Development workflow
Development workflow Anthropic engineering process for pull requests, issue handling, reviews, and production promotion. —
Co-work wrapper GUI wrapper over the same Claude Code agent, aimed at non-technical users who needed safer access. VM sandbox, Permission guardrails
VM sandbox Isolation layer used by Co-work so non-technical users could run generated code more safely. —
Permission guardrails Deletion protections and prompts added for non-technical Co-work users. —

Data flow

A user starts with a goal in the terminal, desktop app, or another Claude Code surface. The agent reads repository context and Claude MD instructions, enters plan mode when the user or model wants a no-code planning pass, then executes through tools such as bash, file reads, searches, logs, issue trackers, Slack, and production diagnostics. Tool output is either displayed verbosely or summarized depending on user configuration and model reliability. For larger tasks, the main Claude Code instance can spawn sub-agents with fresh context windows; those agents search logs, inspect code paths, pick up tickets, or build features in parallel, then return results to the main coordinating agent. Feedback from GitHub issues, internal Slack, direct office observation, and production bug reports feeds back into product changes, Claude MD updates, and newly added or removed tools.

5 supporting quotes
“I just built like a little terminal app to use the API. That's all that I did. And it was a little chat app because you know like you think about the you know AI applications of the time and you know for non-coders today most what what are most people using”transcript, stated
“Then I think tool use came out. I just wanted to try out tool use because I I don't really understand what this is.”transcript, stated
“plan mode there's no there's no big secret to it. All it does is it adds one sentence to the prompt that's like please don't code.”transcript, stated
“the majority of agents are actually prompted by quad today in the form of uh sub agents cuz like a sub agent is just like a recursive quad code”transcript, stated
“It automates code review, security review. Uh it labels all of our issues. It shephards things to production. It does pretty much everything for us. But I think externally I'm seeing a lot of people start to figure this out, but it's actually taken a while”transcript, stated

Why this architecture

Anthropic chose a terminal-first, tool-first architecture because it was the cheapest way to test whether Claude could actually use tools, and because model capabilities were moving too fast to justify a large fixed UI or heavy scaffolding. The design philosophy was to observe what users and the model were already trying to do, make those actions easier, and keep code disposable enough to be rewritten as models improved. Plan mode, Claude MD, sub-agents, verbose mode, and Co-work all followed that same pattern: start from latent demand or observed behavior, add the smallest useful product surface, then revisit it as the model and user base changed.

4 supporting quotes
“We we started with the CLI because it was the cheapest thing and it just kind of stayed there for a bit. >> So in that 2024 period, what how were the engineers using it? Were they sort of shipping code with it yet or were they using it in a different way? >>”transcript, stated
“there is no UI we could build that would still be relevant in 6 months because the model was improving so quickly”transcript, stated
“first started hacking on quad code, I I realized like this thing just wants to use tools. It just wants to interact with the world. And how how do you how do you enable that? Well, the way you don't do it is you put it in a box and you're like, here's the API, here's how you interact with me,”transcript, stated
“my favorite thing in the world is just hearing people's feedback and hearing how they actually want to use it.”transcript, stated

Models used: Claude 3.5 Sonnet · Opus 4.5 · Opus 4.6

Scale

Alternatives considered (roads not taken)

Build a GUI or IDE plugin first instead of a terminal prototype.

Rejected because: The team did not yet know the product shape, and the CLI was the cheapest way for one engineer to test the API and tool-use loop.

“You built it in terminal just because it was the easiest way to get something up and running. >> Yes. Cuz I didn't have to build a UI. >> Okay. >> It was just me >> at that point. It was like the IDEs, Cursor, Windsurf taking off. Were you sort of under any”transcript, stated
“There was no pressure because we didn't even know what we wanted to build. Like the the team was just in explore mode”transcript, stated

Hide or summarize all bash and file output.

Rejected because: Users still needed visibility for shell and operational output, so the team introduced configuration rather than forcing one visibility policy.

“I tried to get rid of bash output just internally just to like summarize it because I was like these giant long bash commands, I don't actually care.”transcript, stated
“summarize it because I was like these giant long bash commands, I don't actually care. And then I gave it to anthropic employees for a day and everyone just revolted. [laughter] I want to see my dash because it it actually is quite useful for, you know, like for something like git output,”transcript, stated

Build heavy scaffolding around current model gaps.

Rejected because: Anthropic expected 10-20% local scaffolding gains to be erased by future model releases, so it avoided investing too much in temporary compensation.

“you can improve performance maybe 10 20% something like that and then essentially the gain is wiped out with the next model.”transcript, stated
“domain on this like, you know, like the spider chart of what you're trying to extend. Um, or you can just wait and the next model will do it. So just always always think in terms of this trade-off where where do you actually want to invest and assume that whatever”transcript, stated

Require large, permanent Claude MD instruction files.

Rejected because: The team preferred minimal instructions because each model needed less guidance, and stale guidance could be deleted and rebuilt incrementally.

“I think it's like couple thousand tokens maybe something like that. Um if if you hit this my recommendation would be delete your quadmd and just start fresh. >> Interesting. >> I think a lot of people like they try to overengineer this right and and really like the capability changes”transcript, stated
“when you kind of add back a little bit at a time. And what you're probably going to find is with every model, you have to add less and less. For me, I consider myself a pretty average engineer to be honest. Like I don't use a lot of fancy tools. Like I I don't”transcript, stated

Use one agent context for large tasks.

Rejected because: The team found value in fresh, uncorrelated context windows and topologies where sub-agents could work in parallel and communicate.

“multiple agents, they have fresh context windows that aren't essentially polluted with each other's context or their own previous context.”transcript, stated
“other's context or their own previous context. And if you throw more context at a problem, that's like a form of test time compute. Um, and so you just get more capability that way. And then if you have the right topology on top of it, so the agents can communicate in the right way, they're”transcript, stated

Expose the terminal product unchanged to non-technical users.

Rejected because: Non-technical users needed VM isolation, deletion protections, permission prompts, and other guardrails, leading to Co-work as a safer wrapper.

“There was a lot of stuff that we had to build for nontechnical users. So it's a little bit different than a technical audience.”transcript, stated
“it runs in a all the code runs in a virtual machine. Uh there's a lot of delete uh protections for deletion and things like this. There's a lot of permission prompting and kind of other guardrails for users. Um yeah, it was honestly pretty obvious. Boris,”transcript, stated

Patterns

tool-use-orchestration (architecture)

Claude Code was built around letting the model call tools such as bash, file reads, searches, scripts, logs, and production diagnostics, because the observed model behavior was that it wanted to interact with the world through tools.

“And that was my first I think ever fuel the AGI moment >> where I was just like, "Oh my god, the model it just wants to use tools. That's all it wants." >> That's kind of fascinating.”transcript, stated
“The way you do it is you see what tools it wants to use. You see what it's trying to do, and you enable that”transcript, stated

human-in-the-loop (operations)

Plan mode and verbose output kept humans in the loop at the specification and observation points where agent execution could otherwise go off track.

“Once the plan is good, and sometimes it takes a little back and forth, they just get clawed to execute.”transcript, stated
“sometimes it just like goes off the deep end and I'm watching and then I can just read very quickly”transcript, stated

multi-agent-orchestration (architecture)

Claude Code uses recursive sub-agents and swarm-style topologies so separate agents can work with fresh context on logs, code paths, tickets, or feature implementation.

“a sub agent is just like a recursive quad code that's all it is in the code”transcript, stated
“spawned a bunch of agents and the agent started picking up tasks. The main quad just gave it instructions and they all just figured it out”transcript, stated

context-engineering (prompting)

The team captured recurring instructions in short Claude MD files, removed stale prompt mass, and relied on fresh sub-agent contexts for harder parallel research and debugging work.

“the idea is every other instruction is in our quadmd that's checked into the codebase and it's something our entire team contributes to multiple times a week.”transcript, stated
“multiple agents, they have fresh context windows that aren't essentially polluted with each other's context or their own previous context.”transcript, stated

feedback-loop-iteration (operations)

Features were identified and tuned from dogfooding, GitHub issues, Slack feedback, direct observation, and user revolt, rather than only from roadmap assumptions.

“You try a thing, you give it to users, you talk to users, you learn, and then eventually you might end up at a good idea.”transcript, stated
“I was I was just like looking at GitHub issues and kind of seeing what people were talking about and looking at our internal Slack feedback channel”transcript, stated

observability-tracing (operations)

Claude Code's debugging workflow depends on rich logs, heap dumps, Sentry reports, production tunnels, and database inspection so agents can diagnose failures rather than guess.

“all you have to do is uh have really good logging and then even just say like hey check out that you know this particular object it messed up”transcript, stated
“Quad Code like took the heap dump. It wrote a little tool for itself to like analyze the heap dump. And then it found the leak faster than I did.”transcript, stated

safety-policy-enforcement (safety)

For non-technical Co-work users, the same agent was wrapped in a virtual machine plus deletion protections and permission prompts instead of exposing raw terminal execution.

“it runs in a all the code runs in a virtual machine. Uh there's a lot of delete uh protections for deletion and things like this.”transcript, stated
“There's a lot of permission prompting and kind of other guardrails for users.”transcript, stated

Tradeoffs

Keep the first product in the terminal.

Chose A cheap terminal-first CLI prototype over Building a full IDE, plugin, or GUI before the product direction was known.

Rationale: The CLI let a single engineer validate API use, tool use, and developer demand quickly, and it stayed valuable longer than expected because users adopted it organically.

3 supporting quotes
“>> It was just me >> at that point. It was like the IDEs, Cursor, Windsurf taking off. Were you sort of under any pressure or getting lots of suggestions of, hey, like we should build this out as a plugin or as a as a fully featured ID itself?”transcript, stated
“There was no pressure because we didn't even know what we wanted to build. Like the the team was just in explore mode”transcript, stated
“I would have said the terminal has like a threemonth lifespan and then we're going to move on to the next thing.”transcript, stated

Build for the model six months out.

Chose Future-capability architecture and disposable scaffolding over Optimizing heavily for today's model limitations.

Rationale: The team expected model releases to erase much of the value of specialized workarounds, so it favored simple surfaces that could be rewritten as models improved.

3 supporting quotes
“don't build for the model of today, build for the model of 6 months from now.”transcript, stated
“engineering work now and you can kind of extend the capability a little bit, maybe 10 20% or whatever”transcript, stated
“all of quad code has just been written and rewritten and rewritten and rewritten over and over and over.”transcript, stated

Expose plan mode as an explicit feature.

Chose A simple prompt-level mode that says not to code yet over Waiting for the model to infer planning automatically or building a complex planning subsystem.

Rationale: Users already wanted a planning-only workflow, and a minimal prompt intervention provided value immediately while still allowing future models to automate the choice.

3 supporting quotes
“All it does is it adds one sentence to the prompt that's like please don't code.”transcript, stated
“Yeah, we've uh we've started experimenting with this because quad code can now enter plan mode by itself. I don't know if you've you guys have seen that.”transcript, stated
“>> I think plan mode probably has a limited lifespan. >> Interesting. >> That's some alpha for everyone here. What would the world look like without plan mode?”transcript, stated

Summarize some tool outputs while preserving verbose escape hatches.

Chose Default summarized reads/searches plus verbose mode over Always showing full output or always hiding details.

Rationale: Modern models were reliable enough to summarize many reads, but developers still needed detailed output for commands, debugging, and trust.

3 supporting quotes
“We recently hit the hid the file reads and uh file searches. So you'll notice instead of saying, you know, like read food.”transcript, stated
“I want to see my dash because it it actually is quite useful for, you know, like for something like git output”transcript, stated
“in slash config you can enable verbose mode and if you want to see all the file outputs you can continue to do that”transcript, stated

Use recursive sub-agents for larger or harder work.

Chose Fresh-context child agents coordinated by the main Claude Code instance over A single long-running agent context for all research, debugging, and implementation.

Rationale: Separate context windows act as additional test-time compute and let agents search different parts of the problem in parallel.

3 supporting quotes
“if you throw more context at a problem, that's like a form of test time compute.”transcript, stated
“have one agent that like looks in the log, like one that looks in the code path.”transcript, stated
“I'll say like use three or maybe five or even 10 sub aents, research in parallel”transcript, stated

Segment expert and non-technical safety surfaces.

Chose Lean terminal Claude Code for technical users and Co-work with guardrails for broader users over One universal interface and permission model for everyone.

Rationale: Technical users could tolerate raw terminal power, while broader internal users needed a GUI, VM execution, and deletion/permission protections.

3 supporting quotes
“The core Claude Code terminal application assumed technical users who understood what they were executing.”summary, stated
“So it's a little bit different than a technical audience. Uh it runs in a all the code runs in a virtual machine.”transcript, stated
“It's just quad code under the hood. It's the same agent. >> Oh wow. >> Um and uh Felix and the team and Felix was early Electron contributor.”transcript, stated

Gotchas (what bit them)

Terminal output summarization can remove visibility users rely on for debugging and operations.

Root cause: The team assumed long bash/file output was mostly noise, but developers used it to catch mistakes, inspect Kubernetes jobs, and understand what the agent was doing.

Resolution: They dogfooded summarization, listened to GitHub and internal feedback, and added verbose mode so users could restore detailed output when needed.

3 supporting quotes
“I tried to get rid of bash output just internally just to like summarize it because I was like these giant long bash commands, I don't actually care.”transcript, stated
“We recently hit the hid the file reads and uh file searches. So you'll notice instead of saying, you know, like read food.md said, you know, like read one file”transcript, stated
“we added a new verbose mode and so that's just like in slash config you can enable verbose mode”transcript, stated

Scaffolding around current model weaknesses can become dead weight within a model cycle.

Root cause: Model capability changed every few months, so workarounds that improved today's model by 10-20% could be made irrelevant by the next release.

Resolution: Anthropic treated scaffolding as temporary, rewrote the codebase repeatedly, and removed or added tools every few weeks.

3 supporting quotes
“>> I think a lot of people like they try to overengineer this right and and really like the capability changes with every model. And so the thing that you want is do the minimal possible thing in order to get the model on track.”transcript, stated
“all of quad code has just been written and rewritten and rewritten and rewritten over and over and over.”transcript, stated
“We unhip tools every couple weeks. We add new tools every couple weeks.”transcript, stated

A feature that is technically simple can still be easy to miss if product discovery ignores latent demand.

Root cause: Plan mode was only one prompt sentence, but the need was visible in users repeatedly asking Claude to think or plan without coding.

Resolution: The team observed GitHub issues and Slack feedback, implemented the one-sentence prompt change in about 30 minutes, and shipped it the next morning.

3 supporting quotes
“plan mode was we saw users that that were like hey quad come up with an idea plan this out but don't write any code yet.”transcript, stated
“Sometimes it was these very sophisticated specs that that they were asking Claude to write, but the common dimension was do a thing without coding yet. And so literally like this was like Sunday night at 10 p.”transcript, stated
“I just wrote this thing in like 30 minutes and then uh shipped it that night. It went out Monday morning.”transcript, stated

Personal experience can lag the current model frontier, causing builders to underuse new agent capabilities.

Root cause: Engineers form habits from models six months earlier, while newer models may already handle broader tool use, debugging, or automation.

Resolution: The team repeatedly relearned the boundary by watching new users, using the latest model, and letting Claude attempt tasks like heap-dump analysis.

3 supporting quotes
“And this is just something I have to constantly relearn because my brain is still stuck somewhere six months ago at times. >> So what would be some advice for technical founders to really become maximalists at the latest model release?”transcript, stated
“Use the model, feel out the boundary of what it can do and then build for the model that you think will be the model maybe 6 months from now.”transcript, stated
“sometimes there's a new person that joins the team and they actually use quad code more than I would have used it.”transcript, stated

Terminal UI affordances are constrained and poorly documented for modern product polish.

Root cause: The terminal lacks DOM-like primitives, has narrow layout and color constraints, and mouse interaction requires tradeoffs such as virtualized scrolling.

Resolution: Anthropic repeatedly prototyped terminal interactions and accepted many discarded iterations to discover usable terminal UX principles.

3 supporting quotes
“Designing for the terminal honestly has been hard, right? It's like uh it's like 80 by 100 characters or whatever.”transcript, stated
“we actually prototyped it a few times and it felt really bad because the trade-off is you have to virtualize scrolling”transcript, stated
“the spinner words, it's gone through probably I want to say like 50 maybe 100 iterations at this point.”transcript, stated

Non-technical users need a different safety boundary than terminal-native engineers.

Root cause: Claude Code's terminal product assumes technical users understand execution risk, while designers, finance staff, and other non-technical users were already trying to use it.

Resolution: Anthropic built Co-work as the same agent in a GUI wrapper with VM execution, deletion protections, permission prompts, and other guardrails.

3 supporting quotes
“People are jumping over hoops to install a thing in the terminal so that they could use this.”transcript, stated
“It's just quad code under the hood. It's the same agent. >> Oh wow. >> Um and uh Felix and the team and Felix was early Electron contributor.”transcript, stated
“There's a lot of permission prompting and kind of other guardrails for users.”transcript, stated

Evaluation

Claude Code evaluation combined product telemetry, internal dogfooding, direct user observation, GitHub and Slack feedback, operational bug reports, and productivity metrics. The team tracked pull requests, commits, and commit lifetimes, compared model/tool behavior against user-visible mistakes, and relied on real adoption curves rather than a single offline benchmark.

Metrics: Internal usage chart during launch review · Pull requests · Commits · Commit lifetimes · Productivity per engineer · Total Anthropic engineering productivity · External startup adoption share · Public commit share attributed to Claude Code · User feedback from GitHub issues and Slack · Dogfooding reactions to output summarization

4 supporting quotes
“the Dow chart is like vertical. Are you like forcing engineers to use it? Like why are you mandating them?”transcript, stated
“pull requests. Um, but we also kind of cross check that against like commits and like uh the lifetime of commits and things like this.”transcript, stated
“then I gave it to anthropic employees for a day and everyone just revolted.”transcript, stated
“It seems like so you're surprised how far the terminal has gone and how far it's been pushed”transcript, implied

Outcomes

The case reports a September 2024 prototype, a launch review around November/December 2024, plan mode built in about 30 minutes, 80% plan-mode usage by the speaker, 50-100 spinner iterations with about 80% discarded, a plugin swarm running over a weekend for a few days, code lifetimes of a couple months, 70% productivity growth per engineer, 150% productivity growth since Claude Code came out, about 20 PRs per day for one heavy user, Mercury's 70% startup model-choice statistic, Semi Analysis's 4% public-commit statistic, and a Co-work wrapper built in about 10 days.

9 supporting quotes
“This was uh September 2024. Yeah. It was like three straight months.”transcript, stated
“I just wrote this thing in like 30 minutes and then uh shipped it that night. It went out Monday morning.”transcript, stated
“the spinner words, it's gone through probably I want to say like 50 maybe 100 iterations at this point.”transcript, stated
“Like this thing isn't ready. It's just a prototype. But yeah, it it was already useful in that form factor.”transcript, stated
“No, no, we didn't. We I just like posted about it and they they' just been like telling each other about it.”transcript, stated
“since quad code came out, productivity per engineer at anthropic has grown 150%.”transcript, stated
“When we looked internally at anthropic, every designer is using it all the entire finance team at this point is using it.”transcript, stated
“they built it in I think something like 10 days. It was it was just like 100% written by quad code.”transcript, stated
“some other stat from like semi analysis that 4% of all public commits are made by cloud code.”transcript, stated