{"id":96676,"date":"2026-10-18T21:01:00","date_gmt":"2026-10-19T01:01:00","guid":{"rendered":"https:\/\/overcentral.com\/en\/?p=96676"},"modified":"2026-09-26T10:54:31","modified_gmt":"2026-09-26T14:54:31","slug":"claude-code-setup-fixes-96676","status":"publish","type":"post","link":"https:\/\/overcentral.com\/en\/claude-code-setup-fixes-96676\/","title":{"rendered":"Claude Code Setup: What the Tutorials Don&#8217;t Tell You"},"content":{"rendered":"<p>Every tutorial promises a five-minute setup. Open a terminal, install a package, paste an API key. You\u2019re done. In theory.<\/p>\n<p>In practice, that first project runs once, then breaks. The agent ignores your instructions. It hallucinates file paths. You waste an afternoon debugging something the guide said would \u201cjust work.\u201d<\/p>\n<p>I\u2019ve set up <a href=\"https:\/\/docs.anthropic.com\/en\/docs\/claude-code\/overview\" target=\"_blank\" rel=\"noopener noreferrer\" data-iacss-external=\"1\">Claude Code<\/a> on five different machines in the past three months. Each time I hit the same hidden roadblocks. Here\u2019s what the tutorials skip and how to fix it.<\/p>\n<h2>The Standard Advice (and Where It Fails)<\/h2>\n<p>Most guides tell you to do three things:<\/p>\n<ol>\n<li>Install <code>claude-code<\/code>codecode via npm or use the Docker image.<\/li>\n<li>Set <code>ANTHROPIC_API_KEY<\/code>codecode in your environment.<\/li>\n<li>Run <code>claude<\/code>codecode in your project folder.<\/li>\n<\/ol>\n<p>That\u2019s technically correct. It\u2019s also incomplete. Three specific gaps cause most of the frustration.<\/p>\n<p><strong>Gap 1: The default system prompt is generic.<\/strong> Claude Code ships with a built-in identity that says almost nothing about how you want it <a href=\"https:\/\/overcentral.com\/en\/best-places-to-work-awards-deadline-79738\/\" title=\"Best Places To Work Awards Extends Special Awards Deadline\" data-iacss-internal=\"1\">to work<\/a>. Without a custom <code>soul.md<\/code>codecode file, the agent treats every project like a one-off conversation. It has no memory of your preferred output structure, your coding conventions, or your risk tolerance.<\/p>\n<p><strong>Gap 2: No skill files means reinventing the wheel every run.<\/strong> Skills are markdown files that define reusable workflows. Without them, Claude Code solves the same problem from scratch each time. That\u2019s fine for a single experiment. It\u2019s a disaster for anything you run weekly.<\/p>\n<p><strong>Gap 3: The free tier throttles you hard.<\/strong> Claude\u2019s API has rate limits that kick in after about 10\u201315 requests per minute on the free plan. A moderately complex task \u2013 reading your codebase, planning changes, writing tests \u2013 can hit that limit before it finishes. The agent stalls mid-task. You restart, lose context, and repeat.<\/p>\n<h2>What Actually Works<\/h2>\n<p>Here\u2019s the setup sequence that fixes those three gaps. It takes about 20 minutes, not five.<\/p>\n<h3>Step 1: Install Claude Code and Point It at Your Project<\/h3>\n<p>Use the official npm package. Skip the Docker image for local development \u2013 it adds latency and complicates file access.<\/p>\n<p>&#8220;`bash<\/p>\n<p>npm install -g @anthropic-ai\/claude-code<\/p>\n<p>&#8220;`<\/p>\n<p>Then initialize inside your project directory:<\/p>\n<p>&#8220;`bash<\/p>\n<p>cd your-project<\/p>\n<p>claude<\/p>\n<p>&#8220;`<\/p>\n<p>This creates a hidden <code>.claude<\/code>codecode folder. That\u2019s where your skills and identity files live.<\/p>\n<h3>Step 2: Write a Real <code>soul.md<\/code><\/h3>\n<p>The default identity is useless. Replace it with a file that tells the agent who it is, how it should behave, and what it should never do.<\/p>\n<p>Create <code>\/opt\/data\/soul.md<\/code>codecode (or wherever your Claude install points \u2013 run <code>claude config<\/code>codecode to check the path).<\/p>\n<p>Here\u2019s a working example:<\/p>\n<p>&#8220;`markdown<\/p>\n<p>You are a senior software engineer who values clarity over cleverness.<\/p>\n<ul>\n<li>Always explain your reasoning before writing code.<\/li>\n<li>Never delete files without asking.<\/li>\n<li>Use TypeScript with strict mode. Import paths must be relative.<\/li>\n<li>When unsure, say &#8220;I\u2019m not certain&#8221; and list your assumptions.<\/li>\n<\/ul>\n<p>&#8220;`<\/p>\n<p>That last line is the most important. Without it, the agent will confidently generate a wrong answer rather than admit it doesn\u2019t know.<\/p>\n<h3>Step 3: Build Your First Skill<\/h3>\n<p>Skills are what make Claude Code consistent. Start with one: a \u201cresearch brief\u201d skill that runs every morning.<\/p>\n<p>Inside the <code>.claude\/skills<\/code>codecode folder, create <code>research-brief\/skill.md<\/code>codecode:<\/p>\n<p>&#8220;`yaml<\/p>\n<p>name: research-brief<\/p>\n<p>description: &gt;<\/p>\n<p>  Research a topic and return a structured brief with cited sources.<\/p>\n<p>  Use when asked to investigate a competitor, tool, or market trend.<\/p>\n<p>tags: [research, briefing]<\/p>\n<p>&#8220;`<\/p>\n<p>Then add the procedure:<\/p>\n<p>&#8220;`markdown<\/p>\n<h2>When to Use<\/h2>\n<ul>\n<li>User asks to research a company, product, or trend.<\/li>\n<li>User says &#8220;brief me on X&#8221; or &#8220;what&#8217;s the latest on Y?&#8221;<\/li>\n<\/ul>\n<h2>Procedure<\/h2>\n<ol>\n<li>Identify the topic from the user&#8217;s request.<\/li>\n<li>Search the web for the top 5 sources (official docs, industry reports, news).<\/li>\n<li>Read each source and extract key facts.<\/li>\n<li>If two sources contradict, present both positions.<\/li>\n<li>Format output as: one-line summary, then bullet points with links.<\/li>\n<\/ol>\n<h2>Pitfalls<\/h2>\n<ul>\n<li>Do not fill gaps with plausible numbers. If data is missing, say &#8220;not found.&#8221;<\/li>\n<li>Do not rely on a single source.<\/li>\n<\/ul>\n<h2>Verification<\/h2>\n<ul>\n<li>Every claim must carry a link.<\/li>\n<li>At least three sources must be cited.<\/li>\n<li>Run a second pass to check that all links are live.<\/li>\n<\/ul>\n<p>&#8220;`<\/p>\n<p>Upload this file into Claude Code by pasting it in the chat with the command: <code>I have a skill file \u2013 save it as research-brief\/skill.md<\/code>codecode. The agent will create the folder and file itself.<\/p>\n<h3>Step 4: Configure Your API Key with a Spending Cap<\/h3>\n<p>Set the key in a <code>.env<\/code>codecode file (never commit it):<\/p>\n<p>&#8220;`<\/p>\n<p>ANTHROPIC_API_KEY=sk-ant-&#8230;<\/p>\n<p>CLAUDE_CODE_SPENDING_LIMIT=10<\/p>\n<p>&#8220;`<\/p>\n<p>The spending limit is critical. A runaway agent can burn through $50 in an hour if you give it a task that loops. $10 per session is a safe starting point.<\/p>\n<h3>Step 5: Test with a Task You Already Know<\/h3>\n<p>Before trusting the setup, give it a job you could do yourself. Ask it to \u201clist every file in this project and describe its purpose.\u201d Check if the output matches what you already know.<\/p>\n<p>If it works, move to a real task. If it fails, check two things:<\/p>\n<ul>\n<li>Is the <code>soul.md<\/code>codecode being read? Run <code>claude config<\/code>codecode and verify the path.<\/li>\n<li>Is the skill file in the correct directory? Run <code>claude skills list<\/code>codecode to see active skills.<\/li>\n<\/ul>\n<h2>Comparison: Common Advice vs. Real-World Fix<\/h2>\n<table class=\"mw-table\">\n<thead>\n<tr>\n<th>Common Tutorial Step<\/th>\n<th>Real-World Problem<\/th>\n<th>What Actually Fixes It<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u201cInstall and run claude\u201d<\/td>\n<td>Agent has no context about your project<\/td>\n<td>Write a custom <code>soul.md<\/code>codecode before the first run<\/td>\n<\/tr>\n<tr>\n<td>\u201cUse the default prompt\u201d<\/td>\n<td>Inconsistent output across sessions<\/td>\n<td>Create at least one skill file<\/td>\n<\/tr>\n<tr>\n<td>\u201cPaste your API key\u201d<\/td>\n<td>No spending limit, risk of runaway costs<\/td>\n<td>Set <code>CLAUDE_CODE_SPENDING_LIMIT=10<\/code>codecode<\/td>\n<\/tr>\n<tr>\n<td>\u201cStart with a complex automation\u201d<\/td>\n<td>Agent stalls on rate limits or hallucinates<\/td>\n<td>Begin with a simple verification task<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>The Hidden Configuration Details<\/h2>\n<p>Two more settings most guides skip.<\/p>\n<p><strong>Model selection.<\/strong> Claude Code defaults to Claude 3.5 Sonnet. For tasks that need heavy reasoning (multi-step planning, code generation), switch to Claude 3.5 Opus by adding <code>--model claude-3-opus-20240229<\/code>codecode to the run command. For simple tasks (file organization, quick answers), use Haiku \u2013 it\u2019s cheaper and faster.<\/p>\n<p><strong>Directory structure.<\/strong> Skills live in <code>.claude\/skills\/<\/code>codecode at the project level. But if you want them available globally, create <code>~\/.claude\/skills\/<\/code>codecode and symlink your project-level skills there. Otherwise each new project starts with an empty skills folder.<\/p>\n<h2>A Note on Debugging<\/h2>\n<p>When the agent gives you a wrong answer, don\u2019t just correct it. Tell it to update its own skill file with the mistake as a pitfall. That way the error doesn\u2019t repeat.<\/p>\n<p>For example, after a failed run where it deleted a file it shouldn\u2019t have, I added this to the relevant skill:<\/p>\n<p>&#8220;`markdown<\/p>\n<h2>Pitfalls<\/h2>\n<ul>\n<li>Never delete files. If a file seems unnecessary, ask the user first.<\/li>\n<\/ul>\n<p>&#8220;`<\/p>\n<p>The next run respected that. The skill file is a living document.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Every tutorial promises a five-minute setup. Open a terminal, install a package, paste an API key. You\u2019re done. In theory. In practice, that first project runs once, then breaks. The agent ignores your instructions. It hallucinates file paths. You waste an afternoon debugging something the guide said would \u201cjust work.\u201d I\u2019ve set up Claude Code [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":100789,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/cards.overcentral.com\/cards\/en\/96676.png","fifu_image_alt":"Claude Code Setup: What the Tutorials Don't Tell You","footnotes":""},"categories":[31],"tags":[],"class_list":["post-96676","post","type-post","status-publish","format-standard","has-post-thumbnail","category-technology"],"fifu_image_url":"https:\/\/cards.overcentral.com\/cards\/en\/96676.png","fifu_image_alt":"Claude Code Setup: What the Tutorials Don't Tell You","_links":{"self":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/96676","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/comments?post=96676"}],"version-history":[{"count":1,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/96676\/revisions"}],"predecessor-version":[{"id":100790,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/96676\/revisions\/100790"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/media\/100789"}],"wp:attachment":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/media?parent=96676"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/categories?post=96676"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/tags?post=96676"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}