I Spent a Week Learning Claude Code’s Agent System. Here’s What Actually Matters. Anthropic's Claude Code agent system offers four extension points—skills, hooks, custom slash commands, and MCP servers—that developers can use to control costs and behavior. A hands-on test of skills and hooks shows that a codebase-overview skill can save hundreds of tokens per session, while PreToolUse hooks enforce guardrails like blocking edits to .env files. The key insight is that most users discover these features in the wrong order, leading to wasted tokens and unintended edits. ⏱ ~8 min read. 📊 Token cost tables I completed Anthropic’s Introduction to Agent Skills certificate. Like most certifications, it gave me the vocabulary. What it didn’t give me was the judgment — when to use which tool, what it actually costs, what to build first in a real codebase. This article is what I wish I’d had before I started. You start using Claude Code. It’s fast. Then one day it edits .env when you didn't mean it to. Or it reads 15 files just to answer a question about your repo structure. Or a PR review floods your context so badly that Claude loses track of what it was doing. These aren’t bugs. They’re the cost of not knowing the four extension points Claude Code gives you: Each solves a different problem. Most people discover them in the wrong order. Let’s fix that. Every feature plugs into one of those slots. Now let’s build from the highest ROI down. Skills are Markdown files Claude uses as tools. The insight that makes them valuable: Claude only sees the description at session start ~100 tokens . The full body loads only when a task matches. A skill with 5,000 tokens of reference material costs almost nothing until you need it. The highest-value skill for any project is a codebase overview. Without it, Claude reads 10–15 files every session just to understand where things live. Setup — run once: mkdir -p .claude/skills/codebase-overviewmkdir -p .claude/skills/summarize-changes .claude/skills/codebase-overview/SKILL.md ---description: Load when asked about repo structure, architecture, where to find things, or naming conventions.--- Monorepo layoutpackages/api — Express REST API, all routes and servicespackages/web — React customer-facing apppackages/admin — React internal dashboardpackages/shared — shared types, utils, validation schemas Commands- pnpm test — run all tests- pnpm lint — lint check- pnpm build — build all packages Conventions- Components: PascalCase.tsx- Custom hooks: useCamelCase.ts, live in hooks/- Tests: co-located .test.ts- API routes: kebab-case, versioned under /api/v1/ Test it: Ask Claude “where do I add a new hook in this repo?” — it answers without reading a single file. Run /usage before and after to see the token difference. The description field is what Claude matches on. Make it task-oriented: "Load when asked about..." — not a noun like "Codebase info" . That one detail is the difference between a skill that auto-invokes and one that sits unused. Skill locations: .claude/skills/