A guide on getting productive with Claude Code, Anthropic’s agentic coding tool. This is an update to my original post from mid-2025, incorporating newer patterns around plugins, issue tracking, and skills.
Installation
You’ll need an either an API key or a Pro/Max subscription. On first start, claude will ask you which you want - I recommend the latter to avoid unmanaged costs. To use a subscription, be logged in to https://claude.ai in a browser and follow the instructions.
To use an API key, set it in $ANTHROPIC_API_KEY.
Either way, the first step is to run the installer:
$ npm install -g @anthropic-ai/claude-code
$ cd <project directory>
$ claude
# authorisation flow runs first time
$ npm update -g @anthropic-ai/claude-code # update
Setup
Think of Claude Code is an excellent developer with no memory who needs help with goals, design and architecture.
Claude Code supports, and works best with, a plan/act pattern so that it knows what it is doing before diving in. The more effective way to drive this is via the superpowers plugin. In Claude Code run:
/plugin marketplace add obra/superpowers-marketplace
Once installed, ask Claude to “plan feature X, creating an issue in beans for it”. This brings in the superpowers plugin and lets you check the high-level design before Claude starts changing your codebase. Once the planning has completed, superpowers will ask you how you want to proceed. For now, just choose the ‘subagents’ options.
There’s also a debugging plugin which is helpful for tracking down issues. This will be automatically triggered when you mention ‘fix this bug’ or similar (if not add ‘use superpowers’).
Issue Tracking with Beans
LLMs have bad memories and lose track of tasks, so they need an issue tracker. While humans use Jira or GitHub Issues for project-level tracking, Claude needs something more granular. By default, Claude will use markdown files, but giving it a proper git-integrated issue tracker makes it much more capable.
Install beans:
$ brew install hmans/beans/beans # macos
$ beans init
Then add it as a hook in .claude/settings.local.json:
{
"hooks": {
"SessionStart": [
{ "hooks": [{ "type": "command", "command": "beans prime" }] }
],
"PreCompact": [
{ "hooks": [{ "type": "command", "command": "beans prime" }] }
]
}
}
Claude should then use beans for issues (prompt it “use beans” if not). Run beans tui to see and manage issues yourself. Use this heavily - every minor task should be an issue or a bug. Think of it as a short-term structured scratch pad, not a Jira replacement.
General Advice
This is software engineering, not vibing. To make this work and be sustainable, you must:
-
Have tests. Claude often forgets to write tests, but when prompted is very good at creating test suites. It’s also good at doing this for existing codebases.
-
Use typing. If writing Python, use types and
pyrefly --checkormypy. -
Use consistent formatting, enforced programmatically. Use
rufffor Python,prettierfor JavaScript, etc. -
Strictly enforce all this via pre-commit hooks. Do not allow checkin unless all of these pass.
Without being firm about these, the code will become a mess.
Using CLAUDE.md Files
Claude reads information and guidance from CLAUDE.md files in order: first from the user’s home directory, then at the top level of the project, and then per-directory. There’s also CLAUDE.local.md which is the local, git-ignored version for storing working info, memories, etc.
Use /memory to see all these.
Per-project and directory-level CLAUDE.md files should be committed to source control and treated as shared artifacts.
These can be very complex and give a lot of context to Claude. Look at samples and more samples to get ideas. It’s good to ask Claude to add to the file when something has gone wrong and been solved: “Add to CLAUDE.md an instruction to avoid this in future”.
If team members use different AI tools (aider, codex, etc.), vibe-rules can store a canonical version of the rules and translate them into different formats as needed.
Hints and Tips
-
Run
/compactto free up context window space. Run/resetto clear the context window and start again - this is more efficient than repeated compaction/summarisation over time. -
Run
/security-reviewto get a security review of pending changes. -
To resume a previous session, run
claude --resumeand pick from the list. -
Ask Claude to undo changes and think again if needed. ESC now allows rewind including file state.
-
Give it more detail and longer prompts for better results - explain the wider context and constraints, not just the immediate task.
-
Once Claude has created a plan, ask it to review the plan. Then ask it to review it again, maybe focusing on a specific area. There’s some evidence that doing this up to 5 times improves the outputs.
-
There are keywords to use more reasoning tokens:
We recommend using the word “think” to trigger extended thinking mode, which gives Claude additional computation time to evaluate alternatives more thoroughly. These specific phrases are mapped directly to increasing levels of thinking budget in the system: “think” < “think hard” < “think harder” < “ultrathink”
-
Add custom slash commands. These are great for encoding complex workflows.
-
Claude can work in parallel, which is a time saver for bigger tasks:
> give me three options for new blog posts. Run three agents in parallel to do this
⏺ I'll generate three blog post ideas for you by running three agents in parallel.
⏺ Update Todos
⎿ ☐ Generate three blog post ideas
⏺ Call(Run three agents to generate blog post ideas)…
⎿ Task(Generate AI ethics blog idea)…
⎿ Task(Generate productivity blog idea)…
⎿ Task(Generate future tech blog idea)…
⎿ Done (3 tool uses · 9.7s)
⏺ Update Todos
⎿ ☒ Generate three blog post ideas
MCP Servers
Claude can be extended via MCP to connect to external services:
$ claude mcp add my-server -e API_KEY=123 -- /path/to/server arg1 arg2
$ claude mcp list
$ claude mcp get my-server # get details
$ claude mcp remove my-server # delete
Use .mcp.json to commit standard MCP servers into the repo.
Examples
Playwright for web testing. Run claude mcp add, choose CLI extension with:
$ claude mcp add "docker run -i --rm --init --pull=always mcr.microsoft.com/playwright/mcp"
Claude then has access to browse websites, allowing things like “Move the location of this div, and check that it’s worked using playwright”.
Using the Anthropic Chrome plugin is a an alternative. Run claude --chrome for this. It’ll prompt you to install the extension if needed from https://www.claude.com/chrome
This allows crazy workflows and the ability to automate anything you go do in a browser e.g. using Claude Code to list and sell items online. It also opens up a bunch of risks so be very careful here if you move beyond using these plugins to allow Claude to test what it’s developing
Context7 - an MCP server that provides correct and up-to-date library documentation. Tell Claude to use it:
Create a script to delete the rows where the city is "" given PostgreSQL credentials. use context7
Jira/Confluence:
$ claude mcp add --transport sse sse-server https://mcp.atlassian.com/v1/sse
Then within Claude run /mcp, select the Atlassian MCP, and run the OAuth workflow to authorise.
MCP has taken off as a standard and there’s loads of servers out there now. The fast-mcp Python library makes it easy to build custom MCPs to connect to internal tooling.
Skills
Skills are reusable prompt templates that encode repeatable workflows. Think MCP for data access/auth, skills for repeatable tasks.
How Skills compares to prompts, Projects, MCP, and subagents explains the distinction.
Skills should be checked into the project repo (if unique to that codebase) or a shared skills repo if more general. Some of the highest-impact things you can do are to write skills that encode your team’s workflows and standards.
Cost Control for API users
Use ccusage to track spend. Add the below to ~/.claude/settings.json to have a live status line:
{
"statusLine": {
"type": "command",
"command": "npx ccusage@latest statusline"
}
}