
Hook
Last week, I was asked how Claude Code actually improved my productivity, past the pitch of "it writes code for you." I didn't have a sharp answer on the spot. Turns out the honest answer isn't about writing code faster, it's about writing the thing that does the task once, instead of re-explaining the same task every time.
ToC
What it is
An agentic coding tool is an interactive cli tool. You run it, from a project directory, and it can manage your workflow, directly from your terminal: reads files, greps for symbols, edits code, runs your test suite, commits changes... All of this through natural language instructions.
How it fits your workflow
You don't hand the agent a vague goal and walk away. You point it at a concrete, bounded task: add a migration, patch a flaky test, trace where a Django task raises an exception. Your agent works best when your Git repository already carries conventions it can follow: an existing test pattern, a linter it can run against its own output, some pre-commits rules. Without that scaffolding, it tends to invent its own conventions.
A practical example
Say you want to open a pull request on Bitbucket once your branch is ready. The blunt way: just ask Claude Code to do it. Assuming the right credentials are already sitting in environment variables, it can go read Bitbucket's REST API documentation itself, ask you for whatever inputs it's missing: title, description, destination branch. Then, fire off the right curl calls directly in the terminal. No code gets written. API driven by hand, once.
That works, but it doesn't scale: opening a PR is something you'll do again for the next ticket. So instead of asking for the same ad hoc sequence of curl calls every time, you ask for a reusable capability instead. A create_pull_request Python helper Claude Code writes once, and a matching Claude Code skill that wraps it, something you (or another agent session) can invoke by name instead of re-explaining the task from scratch.
This helper is meant to be reused unsupervised: so it should default to a dry run, nothing ships by accident when it's called from a script, a hook, or another agent's loop:
import os
import subprocess
import requests
API_ROOT = f"https://api.bitbucket.org/2.0/repositories/{os.environ['BB_WORKSPACE']}"
def create_pull_request(
title: str,
description: str,
repo: str,
destination: str = "develop",
*,
confirm: bool = False,
) -> None:
source = subprocess.run(
["git", "rev-parse", "--abbrev-ref", "HEAD"],
capture_output=True,
text=True,
check=True,
).stdout.strip()
payload = {
"title": title,
"description": description,
"source": {"branch": {"name": source}},
"destination": {"branch": {"name": destination}},
}
if not confirm:
print(f"DRY RUN: {source} -> {destination}: {title}")
return
response = requests.post(
f"{API_ROOT}/{repo}/pullrequests",
auth=(os.environ["BB_USER"], os.environ["BB_API_TOKEN"]),
json=payload,
)
pr = response.json()
print(f"Created PR #{pr['id']}: {pr['links']['html']['href']}")
The matching skill enforces the same gate one level up, in the conversation itself, before confirm ever gets set.
What matters here isn't the API call. It's the shift from "do this task" to "build the thing that does this task". Every future PR reuses the same tested default instead of re-deriving the correct call, and its safety behavior, from scratch each time.
When it's not a good fit
Coding agents automate the execution of well-understood tasks. Every time something becomes well-understood enough to prompt, it gets automated. Judgment, your job, is the ability to make good decisions under incomplete information, time pressure, and conflicting constraints:
- Developing opinions about system design that survive "but the LLM suggested X"
- Being able to evaluate tradeoffs LLMs do not surface (org politics, migration risk, team capability)
So, back to the original question. The gain isn't lines of code written per hour. The distinction, task vs. capability, is doing more for your output than any single agent feature. To dig deeper on the subject, here are some interesting links: