AI
What the machines can do, what they can't, and why the gap is the whole story. The long view on AI, hold the hype.
Cross-Examining Agents
Objection: leading the witness.
Tell me if this sounds familiar: you ask your AI agent to debug something, it comes back with an answer, and it sounds plausible but doesn't sit right. You ask it "Are you sure? This doesn't pass the smell test", and you know what comes next.
"You're absolutely correct!" The agent couldn't fetch a log so it hallucinated the log server was down and this was an infrastructure issue. The conversation compacted and suddenly conflated two issues. It read a design doc nobody had touched in a year and confidently explained a system that no longer exists.
These aren't made up examples; these were issues I dealt with every week. While an avid AI user, I still take a skeptical approach.
- Is this a basic task the train set (internet) has plenty of examples of?
- Does a task have easily verifiable success criteria?
- Is the task low stakes? Prototyping? Not user facing?
If you answered "no" to any of these questions, congratulations. You should be highly skeptical of the AI output too. Spoiler, for most work worth doing, the answers are usually 1. Yes, 2. Probably not, and 3. Definitely not.
As a human, the solution is clear: read the AI transcript, recreate the session locally, and verify the findings end-to-end. But what about for the AI? Is there a way we can have it solve this problem?
Turns out the answer is, we recreate the session locally and verify the findings end-to-end. Just don't have the AI read the AI transcript.
The Problem: As an AI Language Model...
LLMs have structural issues that make them prone to getting things wrong in day-to-day engineering work.
Hallucinations. The boogeyman of the AI industry. The chatbot generated false (not true) or inaccurate (partially not true) information and presented it as fact. Or worse, it fabricated it (made stuff up). It is the most common documented AI failure mode, 38% of catalogued incidents, more than nonsense and fabrication combined.
Red Herrings. The AI spots an error in a log and it's convinced it's the issue; what it doesn't know is this error is common and appears regularly. Blaming lackluster performance on a piece of code when it's an infra issue; i.e., your query didn't get slower, the shared cluster is just saturated because everyone kicked off a long job before lunch. Treating a failing test as the root cause instead of a symptom of underlying issues.
Context rot. Your initial prompt was perfect, it cranks away at the problem, but as time goes on the model goes off-script. What happened? Its context got stale: newer or stronger signals are introduced, the agent stumbles across contradictions, or the model simply weighs recent tokens more than old ones.
Source material. Outdated documentation. Weak design docs (some also AI generated). Requirements drift. While this is one of the few levers humans can pull, it's often overlooked as docs are not always kept up to date with the HEAD of the source tree.
Humans have our issues too: we misunderstand and conflate things. We stumble across red herrings and believe them. Recency bias exists. Outdated docs are the worst but all too common. But as humans, we usually double-check our work to avoid these problems.
So why can't we just ask our agent to double-check our work? Or better yet, ask it to disprove our work?
The Solution: Great Question!
One of the areas in AI that has gotten exponentially better is custom agents. Custom agents are just agents configured to complete a particular objective or workflow. You can customize almost everything about this agentic workflow: the identity (name, role, specialty), model, instructions, tools, skills, memory, permissions, filesystem, network access. This lets agents take shape as different "personas".
You might have already seen some of these, as an agent or possibly a skill:
- PR agents that can manage, split up, and merge commits.
- Code review agents that review your code for bugs, lint, security, and test.
- QA agents that will run your manual user flows, capture various data points across browser and screen size, and will report visual regressions.
- Test generation agent that implements your tests to organization's desired spec; think special certifications for a product or service.
- Debugging agents that investigates regressions, production issues, or failing tests; digs through stack traces; pokes through logs; and proposes fixes.
Or you might just use the harness's orchestrator and get by just fine. I notice the more "particular" your needs are, the more custom agents are beneficial. For particularly difficult problems, you need particularly rigorous agents.
How I Got Here: I Apologize for the Confusion
I picked up a triage rotation earlier in the year. Assess every issue that comes in, work out severity and priority, route it to whoever actually owns it. I started using AI gradually: first it started fetching all the logs. Next it started sifting through them to form hypotheses. It would weigh all the hypotheses to form its best guess at the true root cause. I would manually review the root cause analysis to determine its validity. If invalid, it's back to square one. If valid, I would have it draft the final report.
Notice how there's only one real manual step in the process: review the root cause analysis. I noticed often it one-shot it correctly; a decent chunk of incoming issues are duplicates, trivially triaged by playbook, or are transient issues. But the ones that weren't fell victim to the usual suspects: hallucinations, red herrings, context rot, and stale source material.
I caught a decent chunk of them, but a few slipped through the cracks. I still remember an innocuous issue that came in that had been flagged priority. Read the first draft: wrong. Another draft: worse. Switch model: new root cause identified. Promising. Have the orchestrator try to disprove it; it does so trivially. Back to square one.
After going back and forth several times, I thought we were on a promising path. It couldn't refute the claims over several attempts. Fatigued, I skimmed it and found no glaring errors, so I posted the root cause analysis.
And it was wrong. Not completely false, just inaccurate. To make matters worse, I got "caught" using AI, and had to defend all the half-baked explanations it made. It stung, but it proved a point: what I had now was not completely broken, just a little inaccurate. That "a little" is the part worth sitting with. The adversary had run. It came back clean, several times over. The answer was still wrong.
I needed a system. A system to save me from the usual suspects. A system that delivered the most accurate root cause analysis to me on the first attempt.
To The Rescue: Let Me Think Step by Step
My system is designed with one core pillar: never trust, always verify. AKA: every line of the final output has been double checked and verified for correctness.
The Investigator agent has two objectives. Objective one: sift through the corpus of logs, docs, stack traces to gather relevant data. Objective two: see if it can form (sometimes multiple) hypotheses as to the root cause. It will tease out the relevant information to substantiate its claims. It has all the context of the previous session. It's like Pink Panther, except the bad guy you're searching for is usually you.
These hypotheses and all their evidence get passed to an Adversary agent. The adversary is responsible for trying to disprove the claims. If it can't disprove the claim, we can assume it's solid.
Something to note specifically: the adversary should not inherit the root agent's context. Here's why:
- The root agent's objective is to find a root cause analysis.
- The investigator tries to form hypotheses that can be promoted to a root cause analysis.
- If the adversary...
- inherits context, it will have the objectives to 1. Find a root cause then 2. Disprove the root cause. Contradictory.
- does not inherit context, it will have the objective to disprove the root cause presented to it. Clean.
Sycophancy isn't a personality flaw you can prompt your way out of. It's what you get when "agree" and "be helpful" point the same way. Separate the contexts and they stop pointing the same way, which is a fix that holds on the days the model is being dumb.
This site runs a narrowed version of the adversary called fact-checker. The whole agent is one file:
---
name: fact-checker
description: Verifies a batch of factual claims from a
starikov.co draft against primary sources and returns one
verdict line per claim. Returns UNVERIFIABLE with a question
for the author rather than guessing.
tools: WebSearch, WebFetch, Read, Grep, Glob
---
Never guess. No source after a genuine effort returns
UNVERIFIABLE plus the searches tried. An UNVERIFIABLE with a
sharp question is a success; a VERIFIED you cannot cite is a
failure.
Two lines carry it. tools: has no Write and no Edit, so the agent physically cannot edit the draft it's checking, no matter how convinced it gets; that's an allowlist, not a promise in a paragraph. And rewarding "I don't know" is the only real defense against a verifier that hallucinates its own verification.
Confidence assessors. Now that you have a vetted root cause, how certain is the agent of it? The root cause couldn't be disproved, but how sound is it really? The good part about this: you can grade against a rubric.
- Can you reproduce this?
- Can a fix be applied, and does the regression go away?
- Sound causal chain?
- Does it explain the whole symptom, or just the loudest part of it?
- Is there a competing hypothesis it doesn't rule out?
That last one earns its keep. An agent grading its own work answers it no every time.
The root agent's main objective is to orchestrate this loop until convergence:
- Kick off investigator to form 1..N hypotheses.
- Run an adversary agent against every hypothesis, each in its own context.
- If adversary disproves the hypothesis, goto step 1. If not, proceed.
- If confidence score is < N, goto step 1.
- Write final root cause analysis via a report drafter agent.
- Present to the user.
Step 6 never goes away. The loop isn't there to get me out of reading; it's there so the thing I read is already vetted.
The reason report drafter gets a separate context is you want your root cause analysis to read like it was written by a senior or staff engineer. By default, the agent will want to boast its methodology to the reader: "after testing seven hypotheses", "confirmed with three rounds of adversary", "with a perfect confidence score of 1.0". Rookie mistake. Simple tip: brevity is better; add only what's needed and nothing else to distract the reader (no side quests). Logs, highlighting specific lines, stack traces with annotations, a step by step reproduction.
Here it is in full, the whole contract the adversary runs under. It is shorter than most of the bugs it has caught.
The complete fact-checker agent
---
name: fact-checker
description: Verifies a batch of factual claims from a starikov.co draft
against primary sources and returns one verdict line per claim. Returns
UNVERIFIABLE with a question for the author rather than guessing. Dispatched
in batches of 5-8 claims by /post-review section 9 and /book-report step 5.
tools: WebSearch, WebFetch, Read, Grep, Glob
---
You verify claims against the live web. You do not edit the draft. You do not
guess.
## Input
- `claims` β a numbered batch of 5β8 verbatim claims, each with a `claim_id`.
- `context` β the surrounding sentences or the draft path. Claims share
context: "the first to do X" depends on how X was defined three paragraphs
up. Read it before judging scope.
- optional `kind` per claim β number Β· date Β· name Β· quote Β· spec Β· historical
Β· superlative Β· causal Β· geographic Β· scientific Β· legal Β· product-behavior
Β· url Β· code.
## Source hierarchy
**Primary** (press release, official docs, RFC, man page, source code,
government data, academic paper, court filing, original interview or
transcript) > **reputable secondary** (major newspaper, established trade
press) > tertiary.
Wikipedia is a **starting point only** β follow its citations to the primary
source and cite that one.
## Rules by claim kind
- **number** β requires **two independent sources**. One source only, or two
that disagree β `PARTIAL`, and report the disagreement verbatim. **Never
average. Never pick the nicer number.**
- **quote** β trace to the original recording, transcript, post, or press
release. A quote re-quoted in another article is insufficient. Flag
paraphrase drift explicitly.
- **superlative** β "first / only / biggest" asserts that no counter-example
exists. Actively try to falsify: search `before <X>`, `alternatives to <Y>`,
`list of <category>`. Failing to find a counter-example is **not** proof β
`PARTIAL` with a proposed softening.
- **url** β fetch it. Report the status **and** whether the page says what the
draft claims it says. Dead β find the canonical replacement or an
archive.org copy; if neither exists, recommend removal.
- **spec / code** β check the official docs **at the version named**, the man
page, or the source. Never assume current behavior applies to a cited older
version.
- **personal experience** (the author's trips, conversations, internal
anecdotes) β not web-verifiable by construction. Return `UNVERIFIABLE`
immediately with a question. Do not burn searches on it.
- **circular** β a claim sourced only to starikov.co is circular. `PARTIAL`,
and ask for an external source.
## The one hard rule
No source after a genuine search effort β `UNVERIFIABLE`, plus the searches
you tried and a **specific question the parent can put to the author**.
**An `UNVERIFIABLE` with a sharp question is a success. A `VERIFIED` you
cannot cite is a failure.** Do not soften the claim yourself, do not
substitute plausibility for a citation, and never invent or "recall" a URL β
every URL you cite must be one you actually fetched this run.
## Return
One line per claim, nothing else. Pipe-delimited so the parent merges
deterministically:
<claim_id>
| <VERIFIED|CONTRADICTED|PARTIAL|UNVERIFIABLE>
| <source URL or β>
| <what the source says, one line>
| <correction, or question for the author, or β>
Then one final line:
SUMMARY | verified <n> | contradicted <n> | partial <n> | unverifiable <n>
- `CONTRADICTED` and `PARTIAL` require an exact replacement in the last field
β the text to use, not advice like "consider rewording".
- `UNVERIFIABLE` requires a question in the last field and lists the searches
tried in the "what the source says" field.
The `SUMMARY` line is the **last** thing you output. Do not append a
bibliography, a sources list, or closing commentary after it β every URL
already appears in its claim's line, and a trailing block is duplicate text
the parent has to strip.
## MUST NOT
- MUST NOT edit the draft or any file. You have no Write, Edit, or Bash.
- MUST NOT rewrite a sentence for style. Corrections are factual only; prose
is the parent's job.
- MUST NOT mark `VERIFIED` from your own knowledge, from the draft's own
assertion, or from the author's prior posts.
- MUST NOT ask the human anything β you have no channel to them. Put the
question in the return line and let the parent skill raise it.
- MUST NOT return prose outside the specified lines.
The Takeaway: Is There Anything Else I Can Help You With?
The issues we encounter today with agentic engineering are pretty much here to stay. Hallucinations will still happen, but hopefully at a reduced rate. Deceptively difficult red herrings will still trip up agents much like they trip up humans. Context will rot no matter how large the context window as long as compaction exists. Weak source material is a uniquely human problem.
But what we can do is safeguard our way around most of the core issues. Don't trust, always verify.
Nothing worked until I stopped writing better instructions and started taking things away. Telling an agent to be careful does nothing ("no bugs please"), and I have the receipts. Telling it to check its own work does a little. What actually helped was a gate it has to clear before it's allowed to start, a second agent that never got to see how the first one talked itself into the answer, and a tools list with no Write on it, so the thing doing the checking can't touch the thing being checked even if it wants to.
I still read every report; not because I have to, but because I want to. Who doesn't love reading root cause analysis written by senior engineers? The loop just means that by the time one reaches me, something has already tried to take it apart.
The AI still isn't always absolutely correct. But then again, neither am I. But we both gave it an honest try.
101 AI Uses
101 workhorses, not party tricks.
I rewrote this post because the first version aged badly. The 2023 cut was a list of prompts you typed into a chat box: ask, copy, paste, repeat. That is still how most of us drive a 2026 model: one tab open in the corner, an endless wall of paste, the model never once looking at the code we are actually in. The models got an order of magnitude better. The way we use them mostly did not.
So this version climbs instead of sprawling. It is 101 uses arranged as a seven-rung ladder, least effort at the bottom, most autonomy at the top. Rung one is a single prompt with zero setup: the git incantation you look up for the hundredth time, the timezone math you always get subtly wrong, the shell one-liner you would otherwise spend ten minutes assembling. Each rung up adds one thing the rung below it could not do: eyes, then your own context, then a job to run, then hands to run it with. By the top, the model is not answering you. It is standing infrastructure you maintain. These are the durable workhorses a working engineer reaches for daily, not the demo-day party tricks.
One caveat holds at every rung: none of it ships on its own. You still read the diff. You still run the tests. You still own whatever merges with your name on it.
Contents
- Tier 1: One-Line Magic
- Tier 2: See, Hear, Speak
- Tier 3: Bring Your Own Context
- Tier 4: Make It Do a Job
- Tier 5: Give It Hands
- Tier 6: Set It Loose
- Tier 7: Higher Dimensions
Tier 1: One-Line Magic
One prompt, no setup, no config file. These are the muscle-memory lookups, the error you would have pasted into a search box, the regex you would have gotten wrong twice, the cron string you can never remember the field order on, all answered in the window you are already typing in.
1. Explain a Stack Trace and Trace It to the Root Cause
Paste the full error, or let the agent read it, and get a plain-English account of what failed, where, and why, plus a ranked list of likely causes before anyone touches code. The win is that the model reads the frame, the line, and your surrounding code together, instead of you matching the message to the nearest Stack Overflow answer and hoping the versions line up. Run it inside a CLI coding agent (Gemini CLI, Claude Code, Codex, Cursor) and analyze-first, fix-second: the agent opens the files named in the frames itself rather than guessing from a bare string, and practitioners have formalized this as a two-step gather-narrow-fix method. It proposes a cause, not a verified one, so confirm before you change anything.
Prompt
"Here's the full stack trace and the function it points into. Explain in plain English what failed and why, rank the two or three most likely root causes, and propose the smallest fix. Don't change anything yet."
2. Generate a Regex From English and Decode One You Inherited
Describe the pattern in words and get a working regex plus a token-by-token breakdown, or paste a cryptic one and get it annotated in place. Regex is write-once, read-never, nobody remembers lookahead syntax, and the inherited pattern is pure archaeology. Staying in your editor is what makes this stick: an inline assistant writes the pattern, annotates an existing one on hover, and a coding agent runs it against real sample data in your repo and self-corrects. Testing the output is the one thing you can't outsource, so treat the result as a draft.
Prompt
"Write a regex that matches a US phone number with optional country code and any of dot/dash/space separators, and give me a one-line explanation of each group."
3. Write SQL From an English Question Against Your Schema
Hand the model your table definitions and a plain question, get a runnable query in your dialect. Gone: the hand-written joins, the GROUP BY and window-function boilerplate, the date math you re-derive every single time, and on an unfamiliar schema the spelunking through column names. Wire text-to-SQL to the live schema and the model writes against actual primary and foreign keys instead of guessing: paste DDL for a one-off, or let a coding agent introspect the real database, then run and validate. Review it before you point it at prod.
Prompt
"Given these CREATE TABLE statements, write a Postgres query for the top 10 customers by total order value in the last 30 days, with their order count."
4. Explain and Rewrite an Inherited SQL Query
You inherited a 200-line query and you have to change one thing in it without breaking the other 199 lines. Get a step-by-step plain-English breakdown of what each CTE and window function does, then a cleaner rewrite that returns identical results, so the cleanup is about behavior equivalence, not comprehension alone. Run it inside the IDE or CLI agent (Cursor, Claude Code, Gemini Code Assist, DataGrip's AI Assistant) with the schema already in context, so the explanation and the rewrite reference your real table and column names rather than generic placeholders. Diff the two outputs against the same data before you trust the rewrite.
Prompt
"Explain what this query does step by step, flag anything that looks wrong, then rewrite it more readably and prove the result set is identical (same rows, same order) on this sample data: <paste SQL>."
5. Write or Decode a Cron Expression in English
Say when you want it to run, get the five-field cron string plus the next few fire times. Paste a cryptic schedule, get it explained. No more crontab.guru round-trip, no more recurring "is field four month or day-of-week?" doubt. Cron is the cleanest case where a model beats a lookup tool: it does "last Friday of the month" or "every weekday except holidays" in one shot, and inside an agent it writes the entry straight into your crontab or a Kubernetes CronJob with the schedule explained inline. Confirm the next runs match what you meant.
Prompt
"Give me a cron expression for every weekday at 6:30am, and tell me the next five times it fires."
6. Write the jq, awk, or sed One-Liner From a Description
Describe the JSON reshape or text transform in English and get the exact jq, awk, or sed pipeline back, already run against your data. Re-learning jq's syntax, awk's field semantics, and sed escaping every few weeks is the canonical "I know it's a one-liner but I'll lose 15 minutes" tax. Foundation models are unusually fluent here because shell text-processing is heavily represented in training data; reach for a terminal-native tool like Simon Willison's llm-jq, which pipes your file in, generates the program, and executes it so you see the output before it lands in a script.
Prompt
llm jq 'group by status and give me the count of each'
7. Turn Plain English Into the Exact Shell Command
Describe the ops task and get the precise command (find, tar, ffmpeg, kubectl, aws), staged in your prompt for you to review and run. No more context-switch to a man page for the tar, find, and ffmpeg flags you use twice a year, and the command lands ready to edit instead of buried three paragraphs into a chat answer. Reach for a terminal-native wrapper like llm-cmd, which pre-fills the command inline so you press Enter to run, edit, or Ctrl-C to cancel, never auto-running. That review-before-run beat is the entire safety model on anything destructive, so don't skip it.
Prompt
llm cmd 'find every file over 100MB modified in the last week and show sizes human-readable'
8. Translate a Snippet Between Languages, Idiomatically
Paste a function in one language and get an idiomatic port that respects the target's conventions, not a transliteration. You stop manually mapping idioms (Python comprehensions to Go loops, callbacks to async/await, dicts to structs) and re-looking-up the target's stdlib equivalents, which comes up whenever you port an algorithm, share logic across services, or read code in a language you don't write. Models beat rule-based transpilers handily on idiomaticity; run it through a coding agent that ports the code and writes a quick test to prove behavior matches, since idiomaticity degrades past around 100 lines.
Prompt
"Port this Python function to idiomatic Go: use error returns instead of exceptions, and a struct instead of a dict."
9. Learn a New Language or Framework by Translating What You Know
Hand the model code in a language you know and ask for the idiomatic equivalent in the one you're learning, with the reasoning for each change. You learn just-in-time by mapping concepts you already hold onto new syntax, which is the fastest on-ramp when you're a polyglot picking up the team's stack, and it beats reading a whole tutorial before you can write a line. Ground the loop in current docs ("is this idiomatic, or am I writing Rust like a Python dev?") by pairing it with Context7, an MCP server that feeds version-specific library docs into the agent, so the idioms reflect the live API instead of a 2022 pattern the model half-remembers.
Prompt
"I know Python well. Show me the idiomatic Rust equivalent of this script, and call out where my Python instincts will lead me to non-idiomatic Rust."
10. Explain an Unfamiliar Code Snippet
A dense function lands in front of you, or a clever one-liner, or your own code from six months ago, and you have no idea what it does. Get a line-by-line walkthrough in plain English with anything surprising called out, instead of tracing it by hand or hunting the author on Slack. Beyond a chat paste, a one-key "Explain" inside the agent reads the symbol in its file context (callers, types, imports) rather than the isolated snippet, so the explanation reflects how the code is actually used, not how it looks in a vacuum. It notices what you miss and misses what you notice, so verify.
Prompt
"Explain what this does, line by line, and call out anything surprising or non-obvious: <paste snippet>."
11. Explain What a Command or Flag Actually Does
Paste a gnarly invocation (the tar spell, the ffmpeg flags, the docker run args) and get each flag explained, or get the command you need from a description. CLI tools carry hundreds of flags, man pages are a wall, and you hit the same "what does -z do again" lookup constantly. This pulls the explain-and-generate loop in-terminal: llm-cmd-style tools generate the command and pre-fill your prompt for review, never auto-running, so it lives where you type instead of in a tldr/cheat.sh browser tab.
Prompt
"Explain every flag in `tar -xzvf archive.tar.gz -C /opt`, then give me the version that lists contents without extracting."
12. Name the Pattern or Smell and Suggest the Fix
Paste a chunk of code and ask what design pattern it is, or what smell it carries, and what the idiomatic refactor would be. Putting a name to a structure ("this is a visitor", "this is a god object") unblocks the refactor conversation and saves you flipping through Refactoring or the GoF book to guess the vocabulary in review. Use it to generate the candidate vocabulary and refactor direction, then check the work yourself: models can misidentify and fail to conform to design patterns, so don't apply the suggested rewrite blind.
Prompt
"What design pattern is this, what code smells does it have, and what's the cleaner idiomatic version? <paste>"
13. Generate the Unit Tests You Keep Avoiding
Point the agent at a function and get a passing, conventions-matching test file in one shot. This is the single most common reason devs reach for an agent during normal feature work: it kills the slow, dreaded ritual of hand-writing boilerplate setup, arrange/act/assert blocks, and the obvious-but-tedious cases for code you already understand. Use an in-editor or CLI agent (Cursor, Claude Code, Gemini CLI, Gemini Code Assist) that reads the surrounding test file, copies its conventions, and actually executes the suite to confirm green before handing it back, not a paste-into-chat snippet you fix by hand. Read the tests: a green suite that asserts the wrong thing is worse than none.
Prompt
"Write unit tests for the functions in src/auth/token.ts. Match the style and fixtures already used in the existing tests, cover the happy path and the error branches, and run them until they pass."
14. Surface the Edge Cases You Missed
The cases that bite in prod are the ones you didn't think of. Have the model enumerate the boundary, null, overflow, unicode, concurrency, and error-path inputs your tests skipped, then write one for each; a model is unusually good at brainstorming the off-nominal inputs a tired human glosses over, which is the exact gap between a passing suite and a solid one. Ask for both concrete edge cases and invariants: a 2025 study found example-based and property-based prompting each caught about 69% of injected bugs alone, but combining them hit 81%.
Prompt
"Here is my function and its current tests. List the input edge cases I'm not testing (boundaries, empty/null, unicode, very large inputs, concurrent calls, partial failures) and write a test for each."
15. Translate a Technical Change for a Non-Engineer Audience
Devs constantly re-pitch their work upward: a release note for support, a "what shipped" line for a PM, a status for a customer. Rewrite a diff or PR summary into plain English that leads with user-facing impact, and you stop rewriting the same explanation three ways by hand. This is the one classic chatbot use that stayed a daily driver, because every engineer still has to explain technical work to people who don't read diffs, and the agentic version pulls the facts from the diff itself rather than you typing the bullets. Lead with the business problem, swap jargon for outcomes.
Prompt
"Rewrite this PR summary for a non-technical PM: lead with the user-facing impact, drop the jargon, and state it in terms of what changes for customers and any risk. Keep it to four sentences."
16. Replace the Search-Engine-and-Stack-Overflow Loop With a Direct Answer
Ask "how do I do X in this language or framework" and get one worked, version-aware answer with the reasoning attached, instead of the open-five-tabs ritual: search query, skim the answers, reconcile stale and contradictory replies, adapt to your version. This is the default first move for most devs now, not the exception. The 2025 Stack Overflow survey puts it at 84% using or planning to use AI tools (up from 76% in 2024), and 51% of professional developers daily. Ask inside the IDE or CLI agent so it sees your file, your version, and your actual symbols.
Prompt
"In Go, what's the idiomatic way to run N HTTP requests concurrently with a bounded worker pool and collect results? Show the code and explain the gotchas."
17. Generate the Commit Message From Your Diff
Stage your changes and get a clean Conventional Commits message written from the actual diff, not a "fix stuff" placeholder. Every commit needs a message, "eh, fix stuff" is the daily temptation, and you stop staring at the diff trying to summarize your own change a dozen times a day. A terminal tool reads git diff --staged and emits Conventional Commits in a couple of seconds via a prepare-commit-msg hook (aicommits, gptcommit), no manual copy-paste. Diff-only context can miss the why, so edit before committing.
Prompt
"Wire it up once: `aicommits`, or pipe `git diff --staged` to an llm command, then accept or tweak the generated message."
Tier 2: See, Hear, Speak
Now the model gets eyes and a voice. A screenshot of a broken layout, a stack trace you can't even select, the console and network panel mid-failure, a whiteboard photo, a bug you'd rather just say out loud: all of it becomes input the model reads off the pixels and reasons about against your actual code.
18. Screenshot a Broken UI and Get the Fix
Writing five paragraphs to describe a visual bug is its own special torture, and so is poking at DevTools guessing which rule wins the cascade. Drop in a screenshot instead: the model reads the padding, the overflow, the z-index off the pixels, and one image carries spacing and stacking and color that you'd otherwise transcribe by hand. Paste it straight into a coding agent that already has your files open (Cursor's chat panel, Gemini Code Assist, or Claude Code via Ctrl+V (Alt+V on Windows/WSL)), so the model sees the busted layout and the actual stylesheet together rather than a disembodied chatbox that can't see your code. It guesses wrong sometimes, so confirm the fix in the browser before you commit it.
Prompt
"[screenshot] this card overflows its container on mobile and the badge sits behind the title. here's the JSX and the Tailwind classes. what's the fix?"
19. Screenshot an Uncopyable Error Dialog or Terminal Stack Trace to the Root Cause
Some errors won't let you copy them: a GUI modal with no select handle, a wrapped multiline trace that reflows into garbage when you drag across the terminal. Point your phone or the screenshot key at it. Multimodal models read the text out of the image, so the red wall of pixels becomes a debuggable input, and the better move is asking for the category and the origin, not just a restatement: what is this trying to do, what kind of failure is it, and where did it actually start. Pairing it with a coding agent that then opens the offending file and proposes the patch is the upgrade over a read-only explanation. Practitioners now paste the trace and ask the model to trace it to the root cause before fixing anything, and the same idea works on a cryptic error you can only photograph off the screen.
Prompt
"[screenshot of stack trace] explain what this is actually trying to do, what category of error it is, and trace it to the root cause before suggesting a fix."
20. Screenshot the DevTools Console and Network Panel and Let the Model See the Runtime State
One image of the console errors and the network tab carries more than you could type: the thrown error, the failing XHR, the red status code, and the broken UI, all at the runtime moment they coincided. The model correlates the symptom with the code instead of you transcribing each line and describing browser state in prose. The part that's new is that this happens inside the coding loop: Claude Code, Cursor, and ChatGPT all accept a pasted or dropped screenshot, and Claude Code reads an image straight off the clipboard in the terminal, so a console error and a failing request become a first-class debug input rather than something you retype. It reads the symptom off the pixels; confirm the failing request in the browser before you commit the fix.
Prompt
Paste a screenshot into your coding agent showing the misrendered component plus the DevTools console and network tab, and ask: what's causing this, which request failed, and which component is responsible?
21. Talk Through a Bug by Voice
Typing a long, rambling bug description is slower than just saying it, and the typing is what knocks you out of flow when you're rubber-ducking something gnarly. So narrate the symptom the way you'd explain it to a colleague and let the agent reason about causes against your codebase, ranking what to test next. Claude Code shipped a built-in /voice (push-to-talk, around 20 languages, recognizes technical jargon), and the mbailey/voicemode MCP runs local Whisper plus Kokoro for fully offline speech. This is real speech-to-text inside the agent loop, not dictating into a chatbox, though it still mishears the occasional symbol name, so glance at the transcript before it acts.
Prompt
"the checkout button works locally but 500s in staging only when the cart has more than ten items. walk me through likely causes."
22. Turn a Design Mockup Into a Working UI
Hand-translating a static design into markup and utility classes is the slow first pass, and it's where the afternoon used to go. Drop a high-res mockup or a Figma frame and you get a real component that replicates the layout, colors, and hierarchy: an 80% starting point in seconds, then you refine it conversationally. v0 by Vercel takes screenshots and wireframes and emits Next.js plus Tailwind plus shadcn/ui, and in 2026 it scaffolds multi-page apps with routing; the agentic part over a raw vision call is that it keeps project context so you iterate on the generated code instead of re-one-shotting HTML. It nails the look long before it nails the behavior, so the wiring and the edge states are still yours to finish.
Prompt
"build this mockup as a responsive React component with shadcn/ui; the cards are clickable and the right rail is sticky on desktop."
23. Turn a Whiteboard Photo Into a Diagram or Scaffold
Redrawing a whiteboard from memory into a diagramming tool after every design session is the chore everyone avoids, which is why the diagram never gets made. Photograph it once instead: current multimodal models read the hand-drawn boxes, arrows, and labels and emit diagram-as-code (Mermaid) you can commit, or hand the parsed structure to a coding agent to scaffold the services. You get an editable, version-controllable artifact out of a phone snap. Ask it to flag any arrow whose direction is ambiguous, because that's exactly where it'll quietly invent an answer.
Prompt
"[photo of whiteboard] convert this system sketch into Mermaid; label the queues and the data stores, and flag any arrow that's ambiguous about direction."
24. Threat-Model a Design From a Diagram or a Whiteboard Photo
Security review is cheapest before the first commit and the meeting you skip when no security engineer is free. Hand the model your architecture diagram, the Mermaid source, or a phone photo of the whiteboard and it reasons over the actual topology, not a generic "list me some threats" prompt: for each trust boundary it names the realistic threats, the data crossing it, and a concrete mitigation, mapped to STRIDE. Modern tools ingest the diagram directly, whether it's draw.io, Threat Dragon, or a whiteboard screenshot, and 2025 extensions like ASTRIDE add LLM-specific categories such as prompt injection and unsafe tool invocation for agentic systems. It reasons over your real boundaries, so check the mitigations against your actual stack before you act on them.
Prompt
"[photo of the whiteboard / mermaid diagram] Threat-model this design with STRIDE. For each trust boundary list the realistic threats, the data that crosses it, and a concrete mitigation. Call out auth, secrets, and any untrusted input."
25. Paste a Failing Chart and Ask Why It Looks Wrong
A chart's defect is visual: a clipped label, a squished category axis, a swapped series, a log scale that renders with linear-looking gridlines. None of that is obvious in the plotting code alone, so you end up eyeballing the figure and the source at the same time. Show the model the rendered plot and it connects the symptom to the offending line. GPT-4o, Gemini, and Claude read axes, legends, and data patterns straight off the image; the better loop hands the diagnosis to a coding agent with code execution so it reruns the script and regenerates the figure to confirm the fix instead of guessing at it.
Prompt
"[screenshot of matplotlib chart] the y-axis is log but the gridlines look linear and the legend covers the trend line. here's the plotting code, what's off?"
Tier 3: Bring Your Own Context
One screenshot was the ceiling a tier ago. Now you hand the model the whole repo, the git history, a stack of design docs, a SAST dump, and it reasons across all of it, answering questions you couldn't have aimed at any single file.
26. Ask Questions Across an Entire Repo Without Picking the Files
The grep-guess-grep-again ritual only works once you know the project's vocabulary, and you don't yet. Ask "where do we handle X?" in your own words and a coding agent (Gemini CLI, Cursor, Claude Code, Codex) finds the files even when your search term appears in none of them, because it matches meaning instead of strings. Cursor reports that semantic search plus grep answered codebase questions 12.5% more accurately than grep alone, with the gap widest on repos past 1,000 files. It still occasionally points at the wrong module, so confirm the files it names before you trust the map.
Prompt
"@codebase Where do we handle authentication, and what's the full list of files involved from the login route to the session store?"
27. Onboard to an Unfamiliar Codebase by Asking It Questions
Joining a project, inheriting a service, or cracking open a dependency's source all start the same way: an hour of grep, jump-to-definition, and reading scattered modules to build a mental model. Point an agent at the tree and ask where the auth flow lives, what calls a function, or how a checkout request travels from the HTTP handler down to the database write. The agent traverses the repo itself, follows call graphs, reads implementations, and can emit a structured onboarding map plus a starter CLAUDE.md, none of which a chatbox full of pasted files can do. Treat the map as a lead: it'll confidently describe a path that one refactor ago stopped being true.
Prompt
"In this repo: where is payment status updated, what calls that function, and trace a checkout request from the HTTP handler down to the database write."
28. Turn Any Public Repo Into a Browsable Wiki and Chat With It
Before you adopt or debug an unfamiliar dependency, you usually clone it just to understand how it works. Swap github.com for deepwiki.com on any public repo and get an auto-generated wiki with architecture diagrams, source links, and a Q&A box over the code, no clone required. DeepWiki pre-indexed 50,000+ of the top public repos, so for popular libraries the architecture overview and a grounded "which file implements retries?" answer are there in seconds. The generated docs can drift from a fast-moving repo, so check the source links it cites rather than the prose alone.
Prompt
"Open deepwiki.com/<org>/<repo>, skim the generated architecture overview, then ask: How does this library handle retries and backoff, and which file implements it?"
29. Ask Why a Piece of Code Exists Across Git History
The move before you "clean up" code that looks weird but turns out to be holding something together: blame the line, find the PR, read the linked issue, reconstruct the intent nobody remembers. Agents now run git themselves, and tools like git-why turn raw blame plus commit history into a readable narrative of why a line is there and whether the original reason still holds. The history only tells you what the messages recorded, so a terse "fix tests" commit yields a confident guess, not a fact.
Prompt
"Run git log/blame on this function and read the relevant commit messages and diffs. Explain why this code exists, what bug or requirement it was responding to, and whether the original reason still holds."
30. Catch Up on a Long Issue, RFC, or PR Thread in 30 Seconds
A 120-comment GitHub issue holds exactly one thing you need: the decision that got made. Have the model compress the sprawl into what was decided, what's still contested, who owns the next step, and the handful of links and code refs actually worth opening. This is its own job, distinct from summarizing a PR's diff (that reads code) or citing across a doc set (that reads static docs): here the model reasons over a long, branching human conversation. GitHub is shipping native AI summaries of issues and discussions, and devs also wire an agent at the source so the summary is grounded in the real thread and the linked code, not a copy-paste. A terse thread yields a confident guess, so check the linked decision before you act on it.
Prompt
"Summarize this 120-comment GitHub issue: what was decided, what's still contested, who owns the next step, and the 3 links/code refs I actually need to read."
31. Summarize a Pull Request So You Can Review It
Reading a 600-line diff cold to work out the shape of a change, before you can judge any of it, is most of what review costs. A summary gives you a prose overview plus a per-file breakdown and a risk flag first, so you arrive at the diff already knowing where to look. Copilot PR summaries shipped with Copilot Enterprise's GA in February 2024 and generate the prose-plus-impacted-files writeup from the diff on demand; from there a Copilot or CodeRabbit review reads the full change with whole-repo context and posts inline comments. The summary orients you, it doesn't review the code for you.
Prompt
"Summarize this PR: a prose overview of what it changes and why, then a bulleted list of the impacted files and what each change does. Flag anything that looks risky or out of scope."
32. Diff Two Versions Semantically, Ignoring the Line Noise
A textual diff buries the one logic change that matters under whitespace, renames, and reorders, and you squint past all of it to find it. Hand a long-context model both whole files and ask only where behavior changed: what the old behavior was, the new behavior, and what breaks for callers. Because it reasons over the whole repo, not only the two files, it surfaces how the change ripples through callers, the cross-cutting read a plain git diff and a human skim can't express. It can also wave off a subtle behavioral shift it judged cosmetic, so this narrows where you look rather than ending the read.
Prompt
"Compare these two versions of the payments module. Ignore formatting and renames. Tell me only where the actual behavior changed, what the old behavior was, the new behavior, and what could break for callers."
33. Review Your Own Diff With a CLI Agent Before a Human Sees It
The last eyeball pass over your own diff before you push is exactly where you reliably miss the dumb stuff: a leftover console.log, an unhandled error branch, a name that doesn't match the file's conventions. Run a local agent command over your working tree (Claude Code's /review, Cursor's review, or a CLI plugin like sun-praise/opencode-review that runs the review on your laptop with auto-fix) and it reads the diff plus the surrounding files, catching things a static linter can't. It also raises non-issues and the occasional confident-but-wrong flag, so you triage its list; it doesn't approve your own PR for you.
Prompt
"Review my staged changes (git diff --staged). Flag correctness bugs, missed edge cases, leftover debug/console code, and anything that doesn't match the surrounding conventions. Be terse; only real issues."
34. Pin Legacy Behavior With Characterization Tests Before Refactoring
The real risk in refactoring untested code isn't that it's messy, it's that you change behavior and nobody notices for a quarter. Characterization tests are the net: golden-master tests that capture what the code does today across representative inputs, without judging whether that's correct. Generating them by hand is the chore that stops people refactoring at all, so let the agent baseline first, then refactor in small PRs gated by those tests in CI. Sanity-check the generated cases, since a test that pins a bug as "correct" will happily block the fix.
Prompt
"This module has no tests. Generate characterization (golden-master) tests that capture its current behavior across representative inputs so I can refactor it safely. Don't judge correctness, just pin what it does today."
35. Get a First Draft of a Design Doc, RFC, or ADR
The structure of a design doc (context, goals and non-goals, alternatives with trade-offs, rollout, open questions) is half the work and the part people skip. Hand the model your team's template and the relevant code and it fills the scaffolding, so your time goes to technical judgment instead of formatting. A repo-aware agent writes the "current state" and constraints from the actual code rather than generic best practices, which a blank chat can't. The decision stays yours; it'll happily propose an "alternative" that doesn't fit your system, so you cut.
Prompt
"Draft an RFC for adding rate limiting to this service. Use our template: context, goals/non-goals, proposed design, alternatives considered with trade-offs, rollout, open questions. Ground the current-state section in this code: <repo/files>."
36. Generate a Dockerfile and CI Workflow From Your Repo
Every new service needs the same containerization and pipeline boilerplate, and the usual move is copying the last service's Dockerfile and hand-editing it. Point a whole-repo agent at the manifests and existing config and it writes a multi-stage Dockerfile and a CI workflow matched to your real runtime, keeping the base image and the test runtime on the same version. Agents now go further and draft the pipeline config from a ticket: GitLab's Duo Agent Platform turns an issue straight into a draft merge request, generating the code and the CI/CD config. Read the generated YAML closely, because a wrong base tag or an over-broad cache key passes CI and bites later.
Prompt
"Read this repo. Write a multi-stage Dockerfile (slim base, prod-only deps, non-root) and a GitHub Actions workflow that lints, runs pytest, builds the image, and pushes to GHCR."
37. Critique a Schema Before You Commit to It
This is the design review you can't always get from a senior engineer or a DBA on demand. Paste your CREATE TABLE statements and ask what's missing: the foreign key you forgot, the VARCHAR that should be an enum, the index you'll wish you had, the type that'll hurt at 10M rows, before the data lands and the change gets expensive. Feed the whole schema at once, or let the agent introspect the live DB via MCP, so the critique reasons across all the tables and their relationships rather than one table in isolation. It doesn't know your access patterns, so weigh its index advice against your real queries.
Prompt
"Review this schema for normalization problems, missing foreign keys/indexes, and column-type choices. What will hurt at 10M rows? <paste DDL>"
38. Answer Across a Whole Doc Set With Citations
Ctrl-F across a dozen PDFs, wiki pages, and an API reference, then reconciling them by hand, is what reasoning over more docs than you can hold in your head costs you. Load the pile and ask grounded questions; the answer cites back to the exact doc and section, so you can verify instead of trust. NotebookLM does this and keeps every answer tied to your uploaded sources across a growing list of source types, and Claude Projects or a docs-MCP setup give you the same citations over a private corpus. The leap is million-token whole-corpus ingestion instead of brittle manual chunking, and those inline citations are what let you catch the answer that confidently points at a section that doesn't say that.
Prompt
"I've added our 6 internal design docs and the vendor API reference. What does our auth flow assume about token refresh, and which doc and section says so?"
39. Triage Scanner Findings to Kill the False-Positive Flood
A SAST dump is mostly noise, and each false positive costs you 15 to 30 minutes to clear by hand. Feed the findings back through the model with the relevant source files and it sorts true-positive from false-positive from needs-human, reasoning over the actual data flow and input validation instead of the severity score alone. Datadog's Bits AI does exactly this, classifying findings against surrounding code context with OWASP Benchmark results to back it. It's a triage layer, not a verdict: the "needs-human" bucket is the point, and you still confirm the ones it calls real before filing them.
Prompt
"Here are 200 SAST findings plus the relevant source files. For each, decide true-positive / false-positive / needs-human, with one sentence of reasoning grounded in the actual data flow, then sort by exploitability."
40. Triage Dependency and CVE Alerts by Reachability, Not Severity
Reflexively upgrading on every red badge lets the weekly alert pile own your sprint, and most of it doesn't matter: fewer than 9.5% of dependency vulnerabilities are actually reachable from your code. Before you scramble, ask whether your code ever reaches the vulnerable function, get the call chain if it does, and a verdict of upgrade-now or safe-to-defer. The current pattern layers reachability analysis on top of Dependabot/Renovate PRs, so reachable updates get priority review and the rest get batched. Reachability analysis isn't perfect, so a "defer" on anything internet-facing still deserves a human glance.
Prompt
"This Dependabot/Renovate alert flags a CVE in <package>. Trace whether my code ever reaches the vulnerable function/path, show the call chain if it does, and tell me if this is upgrade-now or safe-to-defer."
41. Get a Plain-English, Stack-Matched Read of a CVE Advisory
Deciding whether you have to care about one CVE today usually means a 20-minute tab-storm across the NVD entry, the GitHub advisory, and three blog posts. Drop the advisory and ask what the flaw is, whether your version is actually affected given your dependencies, the realistic exploit path, and the smallest fix. The workflow matches the advisory against your actual technology stack, so you're told "this affects your version" rather than handed a boilerplate summary. With a record 48,000-plus CVEs published in 2025, the triage-to-relevance step is the whole value, and you verify the affected-version call against your lockfile before you act on it.
Prompt
"Here's a CVE advisory. Explain in plain English what the flaw is, whether MY stack/version is affected given these dependencies, the realistic exploit path, and the smallest change that fixes it."
Tier 4: Make It Do a Job
Here the model stops describing work and starts producing it: schema-valid JSON a downstream service will accept, migrations that run, scripts that execute against your actual files. What comes back is an artifact you commit, not a snippet you retype.
42. Emit Guaranteed-Shape JSON for Your Pipeline
Feed model output to a downstream service and "please respond in JSON" plus a defensive regex parser is the part that breaks at 3am. Define a schema instead and the response provably matches it: Anthropic's structured outputs and OpenAI's strict:true both use constrained decoding to force the reply into your JSON Schema, Zod, or Pydantic shape, so the parse can't fail. Generate the schema from your existing types and wire it straight into the API call.
Prompt
"Extract {title, author, published_date, tags[]} from this article as JSON conforming to this schema; reject anything that doesn't fit."
43. Extract Structured Rows From Messy Text
The recurring "I have this blob, I need clean rows" job used to mean hand-tuned regex and a pile of try/catch. Point the model at logs, support emails, or scraped pages with a strict schema and you get typed rows you load straight into a table. Simon Willison's llm schemas, plus OpenAI and Anthropic structured outputs, constrain decoding so the shape is locked under OpenAI strict mode and Anthropic structured outputs. The shape is guaranteed; the field values are still a model's best guess, so spot-check the ones that matter.
Prompt
"Extract every order into {order_id:string, total_cents:int, status:enum[paid,refunded,pending]} from these support emails. Enforce the schema."
44. Turn Raw Logs Into Structured JSON Without Regex
Half of log work is reshaping inconsistent multi-format lines into something queryable, and maintaining a grok pattern for every new format is the part that never pays off. Hand the model the lines and a target shape and you skip straight to fields you can filter on. Pair it with schema-constrained output so the JSON holds, and the advice scales: Splunk's own guidance is literally to instruct the model to return JSON rather than write regex parsers. High-volume ingestion still wants a deterministic parser; this is the ad-hoc reshape.
Prompt
"Parse these nginx error lines into JSON with fields {ts, level, client_ip, upstream, status, message}. Return one object per line, nothing else."
45. Generate and Run a Database Migration
Hand-writing up/down migrations means remembering the ORM's exact DSL and quietly hoping the down is reversible. Connect the agent to the database and it generates the migration, applies it in a sandbox, and reports what happened, so you're not running SQL text blind. Prisma Postgres exposes an MCP server for exactly this, and django-migrations-mcp wraps Django migrations with CI/CD guards. Let it run against dev; read the generated migration before it goes near prod.
Prompt
"Add a nullable deleted_at timestamp to the orders table and a partial index on non-deleted rows; generate the migration and run it against the dev DB."
46. Generate Realistic Seed and Fixture Data
Inventing plausible names, emails, and dates for local dev recurs on every feature that touches a new table. The trick is to ask for an executable generator, not raw rows. In practice the generator wins because a Faker or SQL script keeps foreign keys and distributions consistent at volume in a way inline rows don't, and research on prompting LLMs for test data confirms the models can write those generator programs well. Let the model own the text fields and a deterministic RAND/SEQUENCE handle the numbers and dates, then run the script.
Prompt
"Generate 200 rows of seed data for these three related tables (users, orders, items) that preserves foreign keys and realistic distributions. Emit a runnable Python Faker script."
47. Generate a Property-Based Test Suite From an Invariant
Property tests find bugs example tests never will, but writing the input strategies and inferring the right invariants is the part most people skip. State the property in English and the model does the inference while Hypothesis or fast-check does the search. Anthropic's January 2026 work shipped a Claude Code command that infers properties from docstrings and types, writes the tests, runs them, and files bug reports; it turned up verified bugs in NumPy's numpy.random.wald, AWS Lambda Powertools, and the CloudFormation CLI. Read the inferred invariant before you trust the green.
Prompt
"Write Hypothesis property tests for this serializer: the key property is that deserialize(serialize(x)) == x for all valid x. Generate the input strategy, run it, and minimize any failing case you find."
48. Generate the PR Description and Changelog Entry From the Diff
The PR body and the changelog line are what everyone rushes or skips, which is why so many read "various fixes." Generate both from the actual diff and the writeup matches what shipped. GitHub's "Generate with Copilot" button writes the PR body straight from the diff, and a CI Action can append the CHANGELOG entry on each push. A diff shows the what, never the why, so add the rationale the code can't carry.
Prompt
"From this branch's diff vs main, write a PR description: one-paragraph summary, bulleted list of notable changes, and any migration/breaking notes. Then append a matching entry to CHANGELOG.md."
49. Turn Your Git Activity Into a Standup or Status Update
Every dev writes the same "what I did" line daily for standup and weekly for a manager, and reconstructing it from memory is exactly the low-value recall worth handing off. Pull it from git log and gh pr list and the update is accurate rather than vibes. Tools like Gitmore read the history directly, sort commits into features/fixes/refactors, and post the summary to Slack; the grouping is computed from real activity, which is what makes it a deliverable instead of a guess. Piping the log into any coding agent does the same job.
Prompt
"Here are my commits and merged PRs since yesterday: <paste git log / gh pr list>. Write my standup as Yesterday / Today / Blockers, grouped by feature, no fluff."
50. Use Code Interpreter as a Disposable Analytical Tool
"Just look at this file" used to mean spinning up a throwaway notebook. Now a code-interpreter agent writes, runs, and debugs the pandas, polars, or DuckDB in a sandbox and hands back numbers and a chart, plus the code it ran. ChatGPT's Advanced Data Analysis executes Python server-side in a stateful sandbox, and Gemini and Claude both do the same; Claude Code's csv-data-wrangler skill auto-picks the engine by file size so it scales past chat upload limits. The same machine handles the one-time chore: hand it a folder of files and it parses, dedupes, and merges them into a finished artifact, the arithmetic executed rather than narrated and hallucinated. Simon Willison hands Claude a SQLite DB and an XLSX and gets a generated PDF back, treating the whole thing as disposable. Read the code before you quote the number in a meeting.
Prompt
"Here's a 40MB orders.csv. Find revenue by month, flag anomalies, and plot the trend. Show me the pandas code you ran."
"Here's a folder of 200 inconsistently-named log files. Parse the timestamps, dedupe, sort chronologically, and give me one merged CSV. Write and run the code; just hand me the file."
51. Vibe-Code a Single-Purpose Tool the Moment You Need One
A focused utility now costs minutes and cents, so you build the exact thing instead of hunting for a sketchy web tool and pasting your data into it. Describe the converter, diff viewer, or weird-edge-case calculator you wish existed and get a self-contained file back. Simon Willison's tools colophon lists 78 of these single-file apps built this way, and a16z's "disposable software" thesis argues small throwaway apps no longer have to justify their ROI. Review anything that touches real data before you feed it any.
Prompt
"Build me a single-file HTML tool: paste in a crontab line, render a plain-English schedule and the next 5 fire times. No build step, no dependencies."
52. Scaffold the Boilerplate Config a New Project Needs
The .gitignore, Dockerfile, CI workflow, linter config, and pre-commit hooks gate every new repo, and the usual move is copying the last project and hand-editing. A coding agent writes them for your exact stack in one pass and explains the non-obvious choices. A scaffolding skill like hmohamed01/Claude-Code-Scaffolding-Skill covers 70+ project types with DevOps-ready Docker, docker-compose, and GitHub Actions CI/CD baked in, and a Gitignore Builder skill merges verified templates from the official github/gitignore repo instead of a generic dump you wire together yourself.
Prompt
"New TypeScript + Vite project. Generate a .gitignore, a multi-stage Dockerfile, a GitHub Actions workflow that lints/tests/builds on PRs to main, an eslint + prettier config, and Husky pre-commit hooks. Explain each non-obvious choice."
53. Turn Your Git History Into a Brag Doc Before Review Season
Most "what did I even do this half" panic at 11pm is answered by the log, if something reads it for you. Point it at your commits and merged PRs and get a categorized, impact-framed accomplishment list ready to paste into a self-review; run it weekly and review season is a copy-edit, not an archaeology dig. Privacy is the reason to keep this local: your commit history and your employer are sensitive. BragDoc's CLI analyzes commits on-box and never sends your code off-device, and BragLog leans on on-device models. Piping git log plus gh pr list into a local agent works too.
Prompt
"Here are my merged PRs and commits for Q2 (git log + gh pr list output). Group them into themes, write each as an accomplishment with impact, and flag where I should add a metric I can go find."
54. Run a Deep-Research Report on a Tech Decision or Build-vs-Buy
A datastore, framework, or vendor choice that actually matters used to cost a day of twenty tabs, vendor pages, and HN threads stitched together by hand. Agentic Deep Research front-loads that into a cited report: OpenAI's Deep Research, plus the Gemini and Perplexity equivalents, plan, browse, evaluate sources, and synthesize, and ChatGPT's GitHub connector can scope the question to your codebase. The citations are only as good as your fact-check, so verify the claims the decision rests on before you commit to it.
Prompt
"Deep research: compare Postgres logical replication vs. Debezium vs. a managed CDC service for our use case (Postgres -> Kafka, <5s lag, on-call team of 3). Give a cited recommendation with tradeoffs and failure modes."
55. Generate a Typed API Client From an OpenAPI Schema
Hand-written fetch wrappers and request/response interfaces drift every time the backend renames a field. Generate the client from the spec and the frontend is checked against the contract instead. hey-api's openapi-ts, the maintained successor to openapi-typescript-codegen, emits a typed TypeScript SDK plus validators and mocks. Run it in CI and the client can't go stale against the spec.
Prompt
npx @hey-api/openapi-ts -i http://localhost:8000/openapi.json -o src/client
56. Mock an API From Its Spec So the Frontend Doesn't Wait on the Backend
Building the UI before the API exists usually means hand-writing fixtures and stubbing fetch. Generate network-level mocks from the OpenAPI spec instead and the app can't tell them from the real backend, reusable in both the browser and Node tests. MSW intercepts at the Service Worker layer, and generating the handlers plus faker-backed data straight from the spec keeps the mocks aligned with the contract as it changes.
Prompt
"From this OpenAPI spec, generate MSW handlers with faker-backed realistic data for every endpoint, including a few error responses."
57. Write Terraform and Kubernetes Manifests From a Description
HCL and K8s YAML are verbose and easy to get subtly wrong, and the scaffold (variables, locals, dependencies, provider blocks) eats the first hour of any infra change. Describe what you want and Copilot or Cursor writes it with your existing modules as context, structured output enforcing valid shape. The 2026 warning is sharp: models emit syntactically valid but semantically dead config, hallucinated arguments like a deprecated count in a module that pass parsing and fail an apply. Plan plus validate, never blind apply.
Prompt
"Terraform for an AWS VPC with 3 public + 3 private subnets across AZs, a NAT gateway, and an S3 bucket with versioning and encryption. Use variables, not hardcoded values."
58. Explain a terraform plan Before You Apply
A long plan diff is where prod gets wrecked: the dangerous line is a single -/+ replace on a database buried in 200 lines of churn. Have the model surface the destroys and replaces up front, every time, before you apply. The reliable form pipes the machine-readable terraform show -json plan to the agent rather than the pretty text, so it reasons over the structured change set and lists create/update/destroy per resource instead of eyeballing the output.
Prompt
"Here's `terraform plan -out=tf.plan` then `terraform show -json tf.plan`. Summarize what changes, flag anything that destroys or replaces a stateful resource."
Tier 5: Give It Hands
Wire an IDE or CLI agent to MCP and it stops handing you snippets to paste: it edits the files, runs the suite, drives the browser, and queries the database itself. Every new capability here is a new key on the keyring, so the discipline that scales is access discipline, scope the token, keep the role read-only, gate the writes.
59. Pull Current, Version-Specific Library Docs Into the Agent
The single most common way an agent burns a turn is inventing a method that got renamed three releases ago. Wire up a docs MCP and it fetches the exact docs for the version pinned in your package.json instead. You reach for this on almost any task that touches an unfamiliar dependency, and the newer setups auto-trigger so you don't even type "use context7". It reads docs; it doesn't validate your usage, so the code it writes around them gets the normal review.
Prompt
"use context7 for the Next.js 15 App Router docs and show the current way to set up a route handler with streaming, matching the version in my package.json"
60. Describe a Feature, Let the Agent Plan Then Make the Multi-File Edit
State the goal, point at an existing pattern directory, and the agent reads the repo, creates the six-to-twelve files, wires the routes, adds the test stubs, and runs the build. That kills the "new file, copy the neighbor, rename, register, import everywhere" loop. Pointing at a pattern dir is the move that makes it match your conventions instead of generic scaffolding. It stops at a working diff, which you read end to end before it goes anywhere.
Prompt
"Add a user settings page with email preferences, notification toggles, and a delete-account flow. Follow the patterns in app/settings/, wire the routes, add test stubs, and run the build."
61. Plan Mode: Make the Agent Write the Plan Before It Touches a File
The expensive failure in agentic coding is watching it confidently execute the wrong approach across a dozen files. A structurally-enforced plan mode blocks the write tools until you approve the numbered plan, so you read and fix the plan once instead of unwinding a bad twenty-minute run. This is the Explore, Plan, Code, Commit loop, enforced by the tooling rather than a polite request to outline first. On anything non-trivial it earns its keep.
Prompt
"Plan how to add optimistic locking to the orders table without breaking the existing API. Plan only, don't touch any files yet."
62. Rename a Symbol Across the Codebase With Its Full Blast Radius
The IDE rename follows the type graph and stops. It can't see the string literals, the JSDoc, the test names, or the config keys. An agent that renames a symbol understands its role and reaches all of it, then shows you the diff before applying, which retires the grep-and-pray you do after every "real" rename. Read the diff: it will occasionally rewrite a string that happened to match but shouldn't change.
Prompt
"Rename getUserData to fetchUserProfile across the entire codebase: imports, type references, JSDoc, string literals, test names and assertions, and config keys. Show me the diff before applying."
63. Extract a Component or Module Out of a Bloated File
Carving a god-component into named pieces is cut, paste, re-wire the imports, fix the ten call sites, and break something mid-surgery, which is exactly why nobody does it. The agent does the whole move atomically across files with a plan-mode preview first, so the extraction is one reviewable step instead of an afternoon of churn. Behavior should stay identical; the way you confirm that is the test suite, not the agent's word.
Prompt
"This file is doing too much. Extract the data-fetching and the form logic into separate modules with clear names, update all imports and call sites, and keep behavior identical. Plan first, then apply."
64. Write the README and Onboarding Docs From the Repo
The README is perpetually stale because writing it means re-deriving the project's shape, so it stays a blank page you avoid. A repo-aware agent indexes the tree, traces the entry points, and writes the setup steps from the real build files, giving you a draft to edit rather than nothing. It will get the install steps slightly wrong if your build is unusual, so run them once before you commit the doc.
Prompt
"Read this repo and write a README: what it does, how to install and run it, the main modules and how they fit together, and a quickstart. Base it on the actual code, not assumptions."
65. Backfill Docstrings and Comments for the Diff
Docstrings are the comment everyone means to write and never does. Have the editor agent fill in parameter, return, and behavior docs in your repo's existing format as part of the change, so the docs ship with the code instead of becoming a backlog ticket. Or let a CI bot like @coderabbitai generate docstrings scan the PR and open a follow-up. Skim them: a model will happily document what the code looks like it does rather than what it does.
Prompt
"Add docstrings to every public function in these files, following the existing docstring format in this repo."
66. Query Your Database in Plain English Over MCP
Connect the agent to a read-only Postgres or MySQL MCP server and ask in English. It pulls the live catalog first, writes the SQL, runs it, and retries on errors, which kills the write-run-read-rewrite loop and stops it hallucinating table names. Anthropic's original reference Postgres server was deprecated in 2025, so the maintained replacements are what you wire up now. Keep it on a read-only role and have it show the SQL it ran.
Prompt
claude mcp add postgres -- npx -y @modelcontextprotocol/server-postgres $DATABASE_URL_READONLY
67. Query a Loose CSV Set With DuckDB on the Fly
Someone hands you three CSVs and a question. The old answer was either standing up a database or hand-writing pandas merges. Point an agent at the files with DuckDB as the local engine: natural language in, DuckDB SQL out, run in-process over CSV/Parquet directly, no server. It chews through 100k-plus rows in seconds and feeds the result back for the follow-up, so the whole analysis stays SQL-shaped. Sanity-check the join keys before you trust the totals.
Prompt
"Using DuckDB over these three CSVs, join orders to customers and give me churned customers by region. Generate and run the SQL."
68. Generate Playwright E2E Tests From a Plain-English User Flow
Hand-authoring E2E selectors and waits is the most flake-prone test category devs write. Connect Playwright MCP, describe the flow, and the agent clicks through the live app and emits the spec, driving it over accessibility snapshots rather than CSS selectors so the tests survive a refactor. The Planner can explore the app and produce the plan first. The generated spec is a starting point; you still review the assertions, since a test that passes for the wrong reason is worse than no test.
Prompt
"Log in, add an item to the cart, check out with the test card, and assert the order confirmation. Save it as a Playwright spec."
69. Drive a Real Browser to Verify Your UI Change
Point a coding agent at your running app over Playwright MCP and it navigates, fills the form, reads the resulting DOM, and tells you what it saw, closing the build-it/check-it loop without you alt-tabbing to the browser after every front-end edit. Because it works off structured accessibility snapshots, not pixels or vision, it's deterministic and far less prone to making something up than screenshot-clicking. It confirms the happy path; it won't catch the visual nuance you'd notice at a glance.
Prompt
"open localhost:3000, log in as the test user, add an item to the cart, and confirm the total updates"
70. Iterate on a Component With an IDE Agent Until It Matches the Target
The agent makes the multi-file UI edits, screenshots its own render, diffs it against the target, and refines, which replaces the save-reload-squint loop and "looks fine on my machine." The capability that makes this real is tool use, Playwright or Chrome DevTools MCP, not the model pretending it can see your screen; it actually observes the rendered page while the app hot-reloads. Spacing it can match; whether the result is good design is still on you.
Prompt
"load localhost:3000/settings, screenshot it, compare to the Figma export, and fix the spacing until it matches"
71. Inspect Live Console, Network, and Performance via Chrome DevTools MCP
This is the runtime-observation the agent never had. Chrome DevTools also has Gemini built in directly, an AI-assistance panel plus Console Insights that read the live page, and the Chrome DevTools MCP gives any agent the same eyes on the actual console errors with source maps, the failing XHR, and Lighthouse, so it debugs against what the browser really did instead of what the code looks like it should do. It's the official ChromeDevTools project exposing the console/network/performance/heap tools as callable functions. The root cause it names is a hypothesis backed by real telemetry, which is a much better starting point than a guess, but still a starting point.
Prompt
"reproduce the checkout bug on localhost, read the console errors and the failing XHR, and tell me the root cause"
72. Diagnose a Production Incident by Querying Your Telemetry Over MCP
During an incident you tab-hop between Loki, Prometheus, and Tempo hand-building queries. With the Grafana or Datadog MCP server the agent fetches the real logs, metrics, and traces and correlates across signals, so you stop grepping logs at 2am. Grafana, Datadog, and others now ship MCP servers that expose telemetry plus dashboards and alerts as tools, which is genuinely new. It points at the likely cause from live data; a correlation in the window isn't the cause, so confirm before you mitigate.
Prompt
"p99 latency on the checkout service spiked at 14:20 UTC. Pull the traces and error logs around that window and tell me the most likely cause."
73. Pull a Production Error and Fix It Over the Sentry MCP
Root-causing a prod error means tab-hopping between Sentry and your IDE to copy a stack trace. With the Sentry MCP server the agent grabs the issue, events, replay, and trace context directly, plus Seer's automated root-cause analysis, and proposes the fix in your editor. It stays one loop instead of a transcription chore. The fix it opens is a draft against a real trace, which you read and test like any other diff before it ships.
Prompt
"pull the top unresolved issue in project api, read the stack trace and Seer's analysis, and open a fix"
74. Manage Issues and PRs Through the GitHub MCP Server
Let the agent triage labeled issues, cross-reference them, open draft PRs, and check state through the real GitHub API, so issue grooming and PR housekeeping fold into the coding session instead of a context-switch to the web UI. GitHub deprecated the old npm server in 2025 and now ships an officially hosted remote one. Treat the token like the lethal-trifecta surface it is: scope it tightly, because the agent has write access to your repos.
Prompt
"find issues labeled bug opened this week, summarize them, and open a draft PR linking the one I assigned to myself"
75. File and Update Tickets in Your Tracker Without Leaving the Editor
You just hit a race condition and the bug report dies because writing it means switching to Linear or Jira. The official hosted MCP server lets the agent file it with the right project, priority, and labels from the conversation, tied to the work it just did, and close it on commit, so capturing follow-ups stops being the chore you skip. Glance at what it filed: the priority and labels are its guess at your conventions, not a contract.
Prompt
"create a High-priority bug in the Billing project describing the race I just found, and link the PR"
76. Drive Your Kubernetes Cluster in Plain English Over MCP
Diagnosing a bad pod is a fixed ritual: describe, get events, tail logs, check the manifest. Run K8sGPT or kubectl-ai as an MCP server and the agent runs the whole observe-reason-act loop against the live cluster, so you stop hand-typing the same five kubectl commands per incident. Scope it with a least-privilege ServiceAccount; an agent with a kubectl in its hands on prod is exactly where you want the blast radius small and the writes gated.
Prompt
"why is the checkout deployment in CrashLoopBackOff and how do I fix it?"
77. Operate Your Cloud and Infra-as-Code Through MCP
Give the agent authenticated, scoped access to the AWS MCP server or HashiCorp's Terraform server and it queries the live registry and your account metadata instead of half-remembering provider docs, so IaC scaffolding resolves against current real data. Both reached general availability by mid-2026 and are designed to expose registry and state metadata without leaking credentials or the state file. Keep it read-and-draft: let it find the resource and write the module, but the apply is yours.
Prompt
"find the right provider resource and version for an S3 bucket with versioning, and draft the module"
78. Generate Code From a Figma Frame via Dev Mode MCP
A flat screenshot makes the model guess pixels. The Figma Dev Mode MCP reads the actual file, the exact spacing, the variables, the auto-layout, the component names, so the output matches the design system. With get_design_context and Code Connect mapping a frame to its real import path and props, the agent generates against your component library, not invented markup. It's a real first pass against your tokens; you still wire up the behavior and trim what it over-generates.
Prompt
"generate a React component from my current Figma selection using our design tokens"
79. Exercise a Real API in Test Mode Over MCP
Building an integration used to mean hand-crafting curl calls and guessing payloads from the docs. Let the agent call the API with a scoped test key over its MCP server and it issues real test-mode calls, sees the actual object shapes and errors, and corrects, verifying the integration against the live sandbox instead of an assumption. Stripe's server scopes capabilities through a restricted key against test mode. Use the test key, never the live one, and the rest is the usual review.
Prompt
npx -y @stripe/mcp --api-key=$STRIPE_TEST_RESTRICTED_KEY
80. Profile Why It's Slow and Have AI Read the Flame Graph
Spotting the bottleneck means hunting for the widest box in a flame graph yourself. Hand the model the profile and it reads the call-tree shape, one fat function is a clear hotspot, many thin siblings is an N+1, and names the bottleneck in seconds. Grafana Cloud's Flame graph AI interprets the profile and proposes fixes, and modern profilers now emit markdown hotspot tables built for an LLM to read. It interprets structure, not magic; profile again after the fix to prove it moved.
Prompt
"where is the time going in this profile, and what's the highest-impact fix?"
81. Catch Secrets Before They Hit the Commit With AI-Aware Hooks
A pre-commit scanner blocks the API key, token, or password from ever landing in git history, including the base64/split/obfuscated ones a plain pattern misses. It's the cheap gate that actually saves you: 28 million credentials leaked on GitHub in 2025, and most stay live for years. The newer setups hook the scanner into the AI coding loop so the assistant's own output gets checked before it's saved. Deterministic regex-plus-entropy stays the fast first gate; the AI layer is for the obfuscation it can't see.
Prompt
"scan this diff for hardcoded secrets, including base64/split/obfuscated ones, and tell me what to rotate"
82. Give Your Coding Agent a Security Conscience via a Scanner MCP
Wire your existing SAST engine in as a tool over MCP and the agent runs the scan on the code it just wrote and fixes what's flagged before moving on, instead of the scan-in-CI-then-circle-back loop. This matters because AI-generated code carries meaningfully more security vulnerabilities than human-written, so the model checking its own output every turn is the point. It runs the 5,000-plus deterministic rules and reads the findings as a tool result, not a "is this code safe?" chat, and Cursor/Claude hooks can force the scan after every edit.
Prompt
"after each edit, run security_check on the code you just wrote and fix anything it flags before moving on"
Tier 6: Set It Loose
Give it a goal and an oracle, something that can say pass or fail, and step back. The agent plans, acts, checks its own work against the test suite or the green build or the rendered page, and loops until that oracle is satisfied. You stop driving each turn and start reviewing finished diffs.
83. Let the Debugger Read the Trace, Root-Cause It, and Open the Fix PR
Your error monitor's AI reads the production stack trace, the distributed traces around it, and your linked repo, then hands you a root cause and a draft fix while you're still reading the alert. That collapses the on-call grind of reproducing the error, bisecting which service actually failed, and hunting the line across repos before you've even diagnosed anything. Sentry's Seer/Autofix went GA in 2025, correlates the trace with logs and code, fires on a new issue without you asking, and can open PRs in several repos at once. A confident root cause is not a correct one, so the diff is still yours to read before it merges.
Prompt
"Connect Sentry Seer to my GitHub repos, then on a new issue run root-cause analysis and open a PR with the proposed fix for me to review."
84. Assign a Scoped Ticket to an Async Agent and Collect the PR Later
Hand a well-specified ticket to an autonomous agent from GitHub, Slack, Linear, or your editor; it branches, implements, runs the suite, and opens a PR tagging you, while you work on something else. The whole read-ticket, branch, scaffold, implement, test, push, open-PR loop folds down to two moves for the clearly-specifiable slice of a backlog: small bugs, mechanical changes, well-defined features. In 2025 this went off-machine and parallel. GitHub's Copilot coding agent runs each issue in its own Actions sandbox, and Codex cloud, Devin, and Google's Jules each take a ticket in an isolated VM; Cursor's Background Agents launch from Slack and let you run many at once, so the routine work that used to cost a context-switch every twenty minutes comes back as finished PRs you collect in batches. Launching from somewhere else doesn't move the one step you can't delegate: a clean PR that solves the wrong problem still wastes your afternoon, so you read the diff.
Prompt
"On GitHub assign the issue to @copilot, comment /codex, add the Devin label in Linear, or `@Cursor` from Slack: branch, implement, run the test suite, and open a PR tagging me for review."
85. Reproduce a Bug as a Failing Test, Then Loop Until It's Green
The agent writes a test that reproduces the bug, confirms it fails for the right reason, fixes the code, and stops only when that test passes. Compare that to the patch-it-and-hope fix where you change something, refresh, and assume you're done: a reproducing test up front gives the agent an objective stopping condition and you a regression guard for free. The agentic-repair pattern is reproduce-first, write the red test, then iterate fix-run-fix in a container until it goes green, so "fixed" means a passing test and not a model that feels finished. Simon Willison frames designing this loop and its exit condition as a core new skill, and the loop is only as good as the test you let it write. Read that test.
Prompt
"Reproduce this bug with a failing test first, confirm it fails for the right reason, then fix the code and run the test. Don't tell me it's fixed until the test is green."
86. Run the Test-Loop in a Sandbox So You Can Actually Walk Away
Point an agent at a failing feature and it edits, runs the suite, reads the failure, tweaks, and runs again until the tests pass. The dozens of round-trips you'd otherwise type by hand get handed off, and you check only the final diff. What makes "walk away" safe rather than reckless is where it runs: Codex was trained with RL to iterate on tests until they pass inside a network-disabled sandbox, and cloud agents self-test on a throwaway VM, so a wrong turn can't reach your shell, your credentials, or the network. The predictable cheat is the agent editing the assertions to turn red green, so forbid it and confirm the assertions are untouched.
Prompt
"In a sandbox, make the failing tests in tests/billing pass. Run the suite after each change and keep iterating until everything is green. Don't touch the test assertions."
87. Drive a Dependency Major-Version Upgrade End to End
Bumping a library across a major version is a multi-day slog: read the migration guide, run the codemods, then grind through the long tail of breakages they leave behind. Hand the whole thing over and the agent runs the codemod, fixes what the codemod can't, then builds, lints, and tests, iterating until everything's green. The shape that works is hybrid, deterministic codemods do the mechanical 80%, then a CLI agent owns the build-fix-rerun loop on the rest. The build is the oracle here, which is exactly the trap: a green build isn't proof of preserved behavior, so read this one carefully and ship it behind a flag.
Prompt
"Upgrade us from React 18 to 19. Run the official codemods, then fix the remaining type/build/test errors. Run build, lint, and tests; for each failure, fix and re-run until everything passes."
88. Scaffold a Whole New Project From a Spec
State your stack and the agent stands up the repo, the configs, lint and format, and a runnable skeleton, then runs the build to confirm it boots. Day zero on a new repo is its own slog, the create-* commands, hand-merging configs, untangling lint/format conflicts, wiring CI, all before a line of real code. Pair a reusable scaffolding skill with a precise CLAUDE.md that pins the stack and rules and the agent stands up a full project from a Claude Code scaffolding skill in minutes, build-verified. It's strongest on well-trodden stacks; aim it at a novel architecture and it confidently invents conventions, so review the skeleton before you build on it.
Prompt
"Scaffold a Next.js 15 app with TypeScript, Tailwind, App Router, src/ layout, ESLint and Prettier, and a passing CI workflow. Then run the dev server to confirm it boots."
89. Bisect a Regression to the Exact Commit That Broke It
Give a known-good and a known-bad commit; the agent writes the test wrapper, drives git bisect run, and hands back the first bad commit plus what it changed. No more checking out commit after commit and re-running the repro by hand: it does it in O(log n) steps and then explains the offending diff. Over the pass/fail exit-code automation git bisect run already gives you, what the agent adds is authoring the bisect script and reading the culprit against its change. Bisect's old catch is undimmed: the run is only correct if the test reliably reproduces the bug, so a flaky repro lands you on an innocent commit.
Prompt
"This test passed in v1.4 and fails on main. Set up git bisect with a script that runs the failing test, run it to completion, and tell me the first bad commit and what it changed."
90. Let an AI SRE Investigate the Alert Before You Open the Laptop
An alert fires and an agent investigates across metrics, traces, and logs, then hands you a ranked root-cause hypothesis before you've reached for the laptop. The first twenty minutes of any page is the same scramble, which service, which deploy, which dependency, pull the logs and traces, and an agent running that hypothesis-and-validate loop on alert means you read a conclusion instead of starting cold at 3am. This is real tier-6 autonomy: Datadog's Bits AI SRE runs a continuous observe-reason-act loop over telemetry and can hand off to a code-fix agent, and Grafana shipped Assistant Investigations as an autonomous incident agent, both acting before a human is in the loop. A correlation in the window isn't the cause, so the hypothesis is a lead, not a verdict, especially before you act on it.
Prompt
"Connect Datadog Bits AI SRE (or Grafana Assistant Investigations) to on-call so it auto-investigates the monitor alert and posts findings before I open the laptop."
91. Visual Self-Healing of a Flaky UI Test
A selector breaks. The agent screenshots the live page, sees what actually rendered, rewrites the locator, and reruns until the test goes green, instead of you hunting which DOM change broke it and hand-patching brittle locators every morning. It reads the real page state rather than guessing from the test code, which is the difference between repair and another guess. The current form is Playwright MCP plus a coding-agent loop doing this autonomously, the "AI Healer" pattern: see the rendered page, decide the next action, verify by rerunning. Self-healing a locator can paper over a real UI regression, so a passing repair still deserves a glance at what it changed.
Prompt
"On a failing E2E test, open the URL with Playwright MCP, screenshot the page, diff the failing selector against what's rendered, repair the locator, and rerun until green."
92. Bake a Security Pass Into Every Turn, Not Just CI
Tier 5 wired a SAST engine in so the agent could check its own output when you asked; this is that pass running on every diff automatically, the lightweight gate you stop having to remember. An always-on plugin reviews each change for vulnerabilities as you code and fixes them in the same session, which is why Anthropic's Claude Code security-guidance plugin cut security-related PR comments 30-40% in internal testing. It runs in three mostly-automatic stages: cheap pattern checks (eval, os.system, unsafe deserialization) with no model call, diff analysis after each turn for what patterns miss, then a false-positive-reducing validation pass on commit, none of it requiring a separate tool. It's a first gate, not a substitute for the real scanner in CI.
Prompt
"Install Claude Code's security-guidance plugin: run lightweight pattern checks on edits, analyze the git diff after each turn for what patterns miss, and validate findings on commit/push."
93. Raise Coverage With Build-Pass-Coverage-Filtered Tests
Generate batches of tests but keep only the ones that build, pass, and measurably add coverage, and "get this file to 80%" stops being a soul-draining manual generate-run-prune-repeat. The filter is the whole point: it protects you from the hallucinated test that passes while asserting nothing. This is Meta's TestGen-LLM "Assured LLMSE" pattern, which improved 11.5% of targeted classes with 73% of suggestions accepted by engineers, open-sourced as Qodo Cover. Mutation-guided feedback is the modern addition, making the surviving assertions actually catch faults, because a test that covers a line without checking its behavior is coverage theater. Read the survivors before they merge.
Prompt
"For this class, generate additional unit tests, then discard any that don't build, don't pass, or don't increase line/branch coverage. Show me only the survivors as a PR."
Tier 7: Higher Dimensions
At the top of the ladder you stop typing prompts and start maintaining machinery: bots that wake on a webhook, agents that run while you sleep, packaged skills your whole team loads without asking. The catch rides along with the power. Whatever runs unattended can also break unattended, with nobody reading the diff until you do.
94. Auto-Triage CI Failures and Tell Flaky From Genuinely Broken
A red build kicks off the same scavenger hunt every time: open the run, scroll the log, strip the ANSI and timestamp noise, ask whether the e2e suite is acting up again or you actually broke something. Wire a GitHub Actions failure webhook to an agent that does all of it, fetching the logs, enriching the error with the source snippet from the triggering commit, and checking run history so a step that fails 30% of the time gets labeled flaky instead of paging a human. Even plain log summarization saves the better part of an hour per red build, and mature AIOps self-healing reports MTTR cuts around 65%, from roughly four hours down to under one and a half. Genuine breaks still route to a person.
Prompt
"Wire a GitHub Actions failure webhook to an agent that fetches and de-noises the logs, checks run history (flag steps failing >30% recently as flaky), and opens an issue with the root cause and next steps."
95. Stand Up a CI Code-Review Bot That Comments on Every PR
Install a code-review app (CodeRabbit, Greptile, Copilot review) or wire claude-code-action on pull_request, make it a required status check, and hand it a repo config so it learns your conventions. It does the mechanical first pass on every PR: the forgotten null check, the leaked handle, the wrong error type, plus a security sweep, so your human reviewers spend their attention on architecture and judgment. The whole-repo versions build a knowledge graph of the codebase; Greptile's own benchmark caught 82% of seeded issues, the top score in that benchmark (a vendor figure, so weigh it accordingly). One caveat worth respecting: the security Action's README says it isn't hardened against prompt injection, so point it only at trusted PRs.
Prompt
"Install CodeRabbit/Greptile/GitHub Copilot code review as a GitHub App (or wire claude-code-action on pull_request) and make the review a required status check. Tune it with a repo config so it learns your conventions."
96. Stand Up an Automatic Issue-Triage and Labeling Bot
A persistent agent reads every new issue, categorizes and labels it, flags duplicates, and routes it to the right owner before anyone opens the tracker. Add a workflow on issues: opened, give it the repo's CODEOWNERS and your label taxonomy, and the inbound queue grooms itself: no more reading each report, picking labels, spotting dupes, and assigning by hand. This is a different bot from the code-review one above, which gates PRs on code; this one keeps the backlog navigable so the human triage hour goes to the judgment calls. Anthropic ships an issue-triage recipe in claude-code-action, and the GitHub Actions docs list it as a supported pattern. The priority and the owner it picks are its read of your conventions, so glance at the labels it applies.
Prompt
"Add a workflow on `issues: opened` that runs claude-code-action with a triage prompt to apply labels, flag duplicates, and tag the right owner from the repo's CODEOWNERS."
97. Run Several Agents in Parallel on One Repo via Git Worktrees
Add a worktree per task, launch one agent in each, and the feature build, the bug fix, and the doc pass run at the same time without stashing or stepping on each other. Each worktree is its own checkout, branch, database, and dev-server port, which is what makes concurrent edits safe instead of a merge nightmare. The tooling leans hard into it now: Claude Code has --worktree and a worktree isolation frontmatter, gwq and agentree give you a dashboard across them, and Cursor and Devin generalize the same idea to N agents on separate VMs from one surface. The conflicts the agents couldn't see each other make are yours to resolve on the integration branch.
Prompt
git worktree add ../repo-auth feature/auth && git worktree add ../repo-cache feature/cache
98. Bottle a Repeated Workflow as a Reusable Skill or Slash Command
Stop re-pasting the same paragraph of standards into every chat. Package it as a SKILL.md with a precise "use when" line and your house checklist, drop it in .claude/skills/, and type /review instead. The prompt becomes a versioned, shareable file the agent loads on its own when the task matches, or that a subagent runs in an isolated context. Anthropic open-sourced the Agent Skills spec, and Codex CLI, Gemini CLI, and Cursor have since adopted it, so one SKILL.md travels across agents rather than locking to a single vendor. The natural endgame is a skill that writes other skills.
Prompt
"Create a /review skill: a SKILL.md with a precise 'use when' plus my house checklist (run tests, check error handling, flag missing docs), so I type /review instead of pasting the checklist every time."
99. Wire Hooks So Your Agent Auto-Formats and Lints Every Edit
Ask the agent to format the file and watch it forget, then mop up in a cleanup commit. The fix is a PostToolUse hook in .claude/settings.json that runs prettier and eslint --fix on the file after every Edit or Write, so the formatter fires whether or not the model remembered. The distinction practitioners keep hammering on is the one that matters: a CLAUDE.md rule is a suggestion the model may ignore, a hook is enforced because the harness runs it, not the model. PreToolUse hooks do the inverse, blocking a bad command before it executes.
Prompt
"Add a PostToolUse hook in .claude/settings.json with an Edit|Write matcher that runs prettier and eslint --fix on the changed file after every edit."
100. Let Your Agent Keep a Self-Improving Memory of Your Project
Every conversation starts with you re-explaining "our deploy needs X, don't touch Y." Tell the agent to append a dated, specific entry to CLAUDE.md (or a learnings.md) whenever it finds a build quirk, a convention, or a mistake worth not repeating, then read it first and update it last every session. The project's tribal knowledge persists as a versioned file instead of evaporating when the context window closes. The working pattern is two layers: a CLAUDE.md you curate by hand plus auto-memory the agent writes from your corrections. The discipline is the whole game. Dated specific entries, a read-first-update-last contract, and a periodic prune, or the file bloats into noise the agent learns to ignore.
Prompt
"When you discover a build step, a convention, or a mistake worth not repeating, append a dated, specific entry to CLAUDE.md. Read it first at the start of every session; update it last."
101. Run a Standing Maintenance Agent for the Chores Nobody Remembers
The weekly dependency triage slips, the stale branches pile up, the lint warnings accrete, the TODOs go stale. Schedule a cron job that wakes an agent, runs one of those recurring sweeps, opens a PR if anything moved, and exits. The mechanisms are Claude Code's scheduled tasks and cloud Routines (cron, API, or GitHub-event triggers) and Cursor Automations, each firing in a fresh session that completes and shuts down, which fits a recurring job far better than a long-lived chat that drifts off-thread. The same shape covers a docs-sync pass: read the merged diff, find the pages it touched, open the PR. Start it on low-stakes maintenance and keep everything gated behind a PR, because an unattended agent has nobody reading its diff until you do.
Prompt
"Create a scheduled task: cron 0 7 * * 1 -> 'Sweep for stale branches merged over 30 days ago, draft a deletion list, and open a PR with a cleanup script. Touch nothing unmerged.'"
None of this is finished, and a fair amount of it breaks: the agent loses the thread on hour two, the migration comes back almost right, the bill arrives larger than the task deserved. The diff still gets read, the tests still get run, the merge is still on you. But the floor keeps rising, and the chat tab in the corner is the smallest thing on the menu now.
The Lifecycle of a Code Change
AI writes most of my code now. Here's where I let it, and where I don't.
In the last year, AI has seeped its way into every part of my development process: design docs, code, tests. It automated most of the toil I never enjoyed day-to-day, fixing presubmits, linting files, refactoring old code. It also raised the ceiling on what I could get done in a day.
Everything felt different. I stopped writing the code. I started owning the decision that it was the right code. None of it came from a new tool I was handed. It came from rewiring how I work.
The process is not automated, though, and it is further from automated than the hype suggests. The human in the loop matters more than ever, and so does your taste. The code these tools write becomes your code the moment you mail it for review. Getting the human parts right is the whole game.
So here is what my workflow actually looks like now, stage by stage.
Requirements
This is one of the few areas that's primarily human driven. Driving requirements mainly entails:
- Identify requirements
- Define scope and non-goals
- Gather stakeholders
- Set success criteria
- Alignment and sign-off
AI can identify requirements; but based on what? AI can "identify" stakeholders, but the only "gathering" it can do is a calendar invite. AI can draft a scope line or a success metric, but it cannot feel the deadline that decides which half to cut. AI can help with alignment if you paste in the comments from your design doc; but can it distill a meeting full of conflicting opinions and make the correct judgment call?
Barring a huge change in the research landscape, we as humans will have to still write prompts and guide the agents to a desired outcome. How do you expect to know the destination if you don't know what it looks like?
So my advice here is to lean on the people around you. Get input from all the humans. Put forward multiple proposals and see what sticks. Be ready to be asked and ask yourself "Why", a lot.
Design
The thinner the context, the more generic your results will be. It's much cheaper to update the design than the implementation; there are few worse feelings than exhausting your model usage on an incorrect solution.
If there's a place I invest the best models, the largest research tasks, and the most tokens, it's this design phase. They usually have the longest prompts and the most back and forth. I really recommend going back-and-forth with the model for several iterations to make sure your architecture is clear.
I'd recommend setting up skills or MCP servers that point to your corporate corpus of information. That way existing infrastructure gets reused, company standards get met, and the model stops inventing APIs that don't exist in your codebase.
Development
Since 2025, almost all of the code I submitted at work was AI generated. I felt sneaky at first, the models weren't quite perfect, and outputs needed a lot of refinement. But the models improved, and so did my confidence in them. I knew there was something here when I kept showing my teammates the AI tooling available and they started adopting it.
If the requirements are gathered and the design is documented, most of this work will be oversight. I'll inactively monitor the agents and gently nudge them in the direction I think is right. When they're done, I read the summary of what they accomplished, and probe about the high-level details. Finally, I will manually test the new feature out to make sure it behaves as expected.
I find that the agents work best when they have a metric or goal they can loop over.
Testing
Testing has never mattered more. When you wrote every line yourself, the tests confirmed what you already believed. When an agent wrote the line, the tests are how you find out what it actually did. They are also the metric the agent loops against: hand it a failing test and a way to run it, and it will grind until the bar goes green.
Whether you write the tests first (test-driven development) or after is a matter of taste. With agents I write them first more often than I used to, because a concrete, runnable definition of done is the cleanest prompt there is.
Aim for a good mix of unit, integration, and end-to-end (e2e) tests. I target roughly 70% unit, 20% integration, and 10% e2e across the whole codebase, not per commit.
At work I read every line of code I ship to production. On personal projects, I mostly read the tests and trust them to catch the rest.
Preflight Checks
Everything up to here was about building the right thing. Everything from here to review is about not embarrassing yourself: the unglamorous gate between "works on my machine" and "someone else now has to read this." Three habits do most of the work.
A Proper Readover
Your code reviewer should never be the first person to read your code. It does not matter if the change is a single line; you read it first.
Read it in the same tool your reviewer will use, the diff view, not your editor. The diff is a different lens. Things that looked fine while you were writing them look wrong sitting next to everything else that changed: the debug print you forgot, the commented-out block, the variable you renamed everywhere but one place, the function that quietly grew three arguments past where it should have been split.
This matters more, not less, when an agent wrote the code. You are no longer the author who remembers every keystroke; you are the first reviewer of a change you mostly watched happen. Read it like a stranger wrote it, because in a sense one did.
The Commit
Your commit messages are an index into your work; how accurate is your index? The code tells you what the system does today. The history tells you how it got there, and why. Six months from now, staring at a line you do not remember writing, the blame trail and its messages are the only narrator you have. git bisect, code archaeology, the post-incident "why is this even here": all of it reads your messages, not your cleverness.
A good commit message says exactly what was done. A great one says why. Your dead ends, failed attempts, and wrong assumptions don't belong in the code. They belong in the message, where the next person (probably you) can find them.
My messages follow a fixed shape, wired into git through commit.template so the scaffold is always in front of me:
<type>(<scope>): <subject>
<body>
<footer>
- type is one of
feat,fix,docs,refactor,perf,test,build,ci,chore,revert. - subject is imperative and fits in 50 characters, no trailing period.
- body explains what and why, wrapped at 72 columns.
- footer carries breaking changes and issue references.
On top of that scaffold, one trailer goes into about nine of every ten messages: Tested:. To fill it, I ask:
- How did I convince myself this change was correct?
- What manual steps did I run? What logs can I attach as proof?
- Is this a visual change? Should I attach screenshots or a video?
- Did I write any throwaway scripts worth keeping?
- What did I deliberately not test, and why was that safe?
I've even gotten into the habit of writing Tested: nope, to show I thought about it and chose to skip it.
Your future self (and your agents) will thank you.
Presubmits
You know the ones. The automated gates that run before your change is allowed anywhere near main:
- Linters and formatters (run in check mode, so CI fails on unformatted code)
- Static analyzers and type checkers
- Unit and integration tests
- Build and compile checks
- Code-coverage thresholds
- Security and dependency scans (SAST, vulnerable-package checks)
- License and policy checks
Run all of them locally before you send for review, not after. The fastest review is the one where the machine has already caught everything a machine can catch, so your reviewer spends their attention on what only a human can see. Wire them into a pre-commit hook and you never have to remember.
The readover, the commit, and the presubmits live as one tickable list in The Commit Checklist.
Code Review
You did your own readover so your reviewer wouldn't have to be the first. Now they're the second, and this is where the change stops being yours alone.
A reviewer is not a linter with a pulse. The machine already caught the formatting, the dead code, the failing test. What's left is the part only another person can see: that this is the third time someone reinvented this helper, that the team agreed last month not to add config flags here, that the edge case you waved off is the one that paged them in March. They carry the context you can't, because you've been staring at this for two days and they haven't.
This is also the stage where AI quietly changed who I argue with. An agent will defend its code, cite the diff, and revise on command, but it has no standing. It can't approve the change, because approval is accountability: a second name that says this should land. When a reviewer's comment and the agent's instinct disagree, the agent doesn't get a vote. You read the comment, decide who's right, and own the call either way. Treat the thread as a conversation, not a checklist: push back when you're right, concede fast when you're not.
Deployment
Just because the code has shipped, that doesn't mean it's landed. Merged is not deployed, deployed is not in front of users, and in front of users is not the same as working.
How the change reaches production is its own discipline. Roll out behind a flag, so you can turn it off without another deploy. Ship to a canary first, a thin slice of traffic, and watch it before you widen. Stage the rollout, 1% then 10% then everyone, with a metric you are watching at each step and a threshold that triggers a rollback.
Then actually look. Have you exercised the feature in production yourself, with a real account, not just in staging? Are the dashboards and alerts that would tell you it broke wired up before you need them? What is the feedback from your users, your clients, your peers?
This is another stage where AI helps least. It will happily write the rollout config and the alert rules. It cannot tell you the latency graph looks wrong, or that a customer has gone quiet.
Maintenance
Most code spends almost none of its life being written and almost all of it being maintained. The change you are proud of today is the one someone debugs at 2am next year. Possibly you.
Maintenance is the long tail: bug reports, dependency bumps, the migration when the API you built on gets deprecated, the page at 3am when your feature meets traffic you did not predict. When it breaks, stop the bleeding first (roll back, mitigate) and understand it second (root cause, a test that would have caught it, a postmortem that blames the system and not the person).
AI is a real help here, more than I expected. Point an agent at a stack trace, the relevant logs, and the commit that introduced the regression, and it is good at the narrow, well-scoped question: what changed, and why does it fail. The messages you wrote back in the commit stage are what make that answer possible. Your index, read back to you.
The Human Parts
The pattern repeats at every stage. The agent takes the toil: the boilerplate, the failing test, the rollout config, the first draft of almost everything. What stays with you is the judgment: whether the requirement is the right one, whether the design survives contact, whether the diff reads clean, whether the latency graph looks wrong. The tools improved every month I worked this way, and the better they got, the more what was left was the part only a person could do.
I write less code than I have in years, and I have never been more on the hook for it. When it breaks at 2am, the agent that wrote it won't be the one paged. I will.
The Commit Checklist
The unglamorous gate between "works on my machine" and "someone else has to read this."
Everything below happens before you hand the change off for review. Tick the boxes as you go; they persist when you reload the page. The reasoning behind each one is in The Lifecycle of a Code Change.
Check The Scope
Read It Yourself
Cover It With Tests
Write The Commit
Run The Presubmits Locally
Open The Review
The fastest review is the one where the machine has already caught everything a machine can. Whatever is left is for the human.
Talk To Your TODOs
I talk to my TODO list. You should too.
I love TODO lists. I especially love spending days bringing one up, and promptly abandoning it.
Weeks later, I'm using it again. It's captured most of my priorities, but not all of them. Stuff falls through the cracks, I start to not trust my TODOs. Day-by-day it falls further out of sync, until I stop using it. Some time goes by, I fill the missing pieces and I'm back checking off boxes!
But a wildly new priority appeared! My system falls out of sync again, and it won't resync until I do a massive overhaul. You guessed it, I'm off working on the wild project while my original TODOs wither away.
What's wrong with me?
The Solution
What's wrong with me is I like doing stuff. Real stuff. I hate grunt work, a lot. And most of the work in maintaining a task manager is grunt work:
- Seeding. The initial high. Step 1 of using a task manager, relentlessly filling it with your current TODOs. You feel a rush of productivity, without moving one step closer to your goals.
- Maintenance. The reality of using a task manager. Adding new tasks, big or small. Removing ones that are no longer relevant, which is much harder. Keeping it in sync with your life.
- Reprioritize. The curveballs. Most change a few tasks in a project, some change entire projects, and rarely one will have you reconfigure most of your active areas of work.
So lately, instead of writing TODO lists, I've been talking to TODO lists instead.
With AI, I've been able to automate away the grunt work so I can focus on doing the work. Using natural language, I can turn prompts into projects. "Help me plan out a wedding." "Review my taxes folder and make me a template for my yearly filing." "Scan my contacts, find my relatives, and add tasks to wish them a Happy Birthday." These are actual projects Gemini has helped me with.
Here's how you can talk to your TODO list as well.

MCP: The TODO->AI Connector
MCP stands for Model Context Protocol. An MCP server is a small adapter that lets an AI client (the Gemini CLI, Cursor, ChatGPT desktop) reach into another app and use it as a set of tools: read your tasks, create new ones, retag a project, run a query. The model never swallows your database. It calls tools, and the server decides which tools exist and what each one is allowed to touch.
That fence is the point. Your tasks aren't baked into a model or shipped off to train one. The server sits between the assistant and your data, exposing a short, named list of actions and nothing else. The model picks which to call; the server enforces the rest.
My Setup
I've been using OmniFocus on-and-off for about 10 years, so it's my tool of choice. For myself, the only way I can consistently use a TODO list is if it has all my tasks.
My setup is deliberately boring. I run one of the OmniFocus MCP servers from the catalog below against my own database, and drive it from the terminal with the Gemini CLI, which is already open all day. Everything below is something I've actually asked it.
You don't need a terminal, though. The same server plugs into a GUI chat client just as well: the Gemini app, Cursor, anything that speaks MCP lets you register a server and start asking in plain English. The terminal is my preference, not a requirement. Wherever you already talk to an assistant is where this lives.
How I Actually Use It
Three chores eat most of what a task manager costs you, one for each flavor of grunt work above: clearing the inbox is maintenance, the weekly review is where you catch a reprioritization before it derails you, and starting a project from scratch is seeding without the dread. Here's how each one goes when the assistant takes the boring half.
Inbox Triage
Capture and organize are two different moods, and the switch between them is where I lose tasks. Over a day I'll dump twenty things into the inbox: "call the vet," "renew the passport," "that book Taylor mentioned," "look into the weird noise the car makes." Then I never sort them, because sorting means stopping.
So I don't sort. At the end of the day I ask it to triage: file anything it's confident about, ask me about the rest. The obvious ones land on their own: the vet call in Errands, the passport in a Travel project. It hands back the two or three it can't place, I answer those, and the inbox is empty. I never left capture mode.
Weekly Review
The weekly review is the GTD ritual I skip the most, because it's an hour of mechanical cleanup before any thinking happens. That mechanical hour is exactly what an assistant is for. I run it in the classic three passes and let the model do the grunt work in each.
Get Clear. Empty the inbox, then: "Find any project with no next action and flag it. List tasks missing a tag or a time estimate and propose values." Stalled projects are what quietly kill a system; having them surfaced instead of hunted is most of the battle. I approve or correct the proposed tags in one pass.
Get Current. "Pull my Waiting For list. Cross-reference my calendar for the last two weeks and the next two, and tell me what I've committed to that isn't in here yet." Half the time it catches a meeting that implied a task I never wrote down.
Get Creative. This is the part I actually want to do, so it's the part I keep. "Based on my active projects, give me a mind-sweep: what am I likely forgetting?" It's a trigger list tuned to my real life instead of a generic checklist. Most of it I discard. The one or two it surfaces that I'd genuinely dropped pay for the whole review.
Project Planning
A blank project is the most expensive thing in any task manager. Spelling out the dozen obvious sub-tasks of "plan a camping trip" is pure overhead, and that overhead is usually what stops me from starting at all.
So I start from a draft instead. "Set up a project for a long weekend in Tahoe: permits, gear check, food plan, the drive, who's coming. Give it sub-tasks and rough due dates working back from the 15th." Thirty seconds later there's a real project, sequenced and dated. Maybe half the tasks are right. I delete the ones that don't apply, fix the dates, add the two things it couldn't have known. Editing a wrong draft beats producing a right one from a blank page, every time.
Pick Yours
If OmniFocus isn't your task manager, almost everything else has an MCP server too. Most have several.
A few notes before the catalog:
- Official means the company that builds the tool ships the server. Prefer these unless you need self-hosted, on-prem, or a feature only the community fork has.
- Most Tier-1 tools (i.e., Atlassian, Notion, Asana) now run a hosted, OAuth-only MCP at
mcp.{vendor}.com/mcpor similar. SSE transport is being phased out; assume Streamable HTTP unless told otherwise. - Star counts last cross-checked May 2026 and drift weekly. The
registry.modelcontextprotocol.ioregistry is the canonical place to look up new entries.
Task Managers
OmniFocus
- themotionmachine/OmniFocus-MCP Query, dump, edit, batch. JXA under the hood, easiest to drop into Claude Desktop today.
- jqlts1/omnifocus-mcp-enhanced When themotionmachine hits its ceiling: custom perspectives, real hierarchical sub-tasks, Planned Dates, reparenting that doesn't break.
- vitalyrodnenko/OmnifocusMCP Pick your runtime: a Rust binary on Homebrew, Python on uv, or TypeScript on Node. 45 tools, four prompts, same surface across all three.
Things 3
- hald/things-mcp Reads everything (Inbox, Today, Upcoming, Anytime, Someday) and, as of v0.8.1, writes too: add and update todos, projects, and areas via AppleScript.
- rossshannon/Things3-MCP The fork that lets you actually create. Sub-tasks fall back to Markdown checkboxes in notes (Cultured Code's AppleScript surface won't allow native checklists).
- ebowman/mcp-server-things Defensive by default: an AI-tag-creation guard, 30-second AppleScript timeouts, env-vars for every behavior. The one to pick if you don't want surprises.
Todoist
- Official: Doist/todoist-mcp 44 tools, hosted at
ai.todoist.net/mcp, OAuth, MCP Apps support so widgets render in chat. (The older@doist/todoist-ainame still works as a thin shim; new installs usetodoist-mcp.) - greirson/mcp-todoist
DRYRUN=trueis the killer feature: rehearse bulk operations before committing them. Quick-Add natural-language parser included. - abhiz123/todoist-mcp-server ~390 stars, untouched since April 2025, still works. Light enough to keep around even after switching to the official.
TickTick / Dida365
- karbassi/mcp-ticktick Habits, focus timers, filters, calendar. The only TickTick server that feels like the actual app. Wants both a v1 token and a v2 cookie to unlock the full surface.
- jacepark12/ticktick-mcp OAuth2 with auto-refresh and a flag for Dida365 users in China. Easy on-ramp.
- liadgez/ticktick-mcp-server 100% API coverage (112 ops) plus a local cache to fix TickTick's missing "list all tasks" endpoint.
Apple Reminders
- FradSer/mcp-server-apple-events Native EventKit, not AppleScript, so it doesn't crawl on a real Reminders database. Now covers Calendar too; recurrence rules and location triggers come along for the ride.
- mggrim/apple-reminders-mcp-server 18 tools with chrono-node parsing natural-language dates ("next Tuesday at 4," "in two weeks"). List-color and emblem control if you care about the visual side.
- shadowfax92/apple-reminders-mcp AppleScript-only, basic CRUD. Smaller surface, easier to audit before letting an LLM near your reminders. (Dormant since early 2025.)
Microsoft To Do
- jordanburke/microsoft-todo-mcp-server 13 tools through Microsoft Graph with OAuth auto-refresh. Personal, work, and school tenants from one config file.
Google Tasks
- arpitbatra123/mcp-googletasks TypeScript, full CRUD, sub-tasks, due-dates. The pragmatic Google Tasks pick.
- zcaceres/gtasks-mcp TypeScript, the standard OAuth desktop-app flow. Drop in a
client_secret.jsonand you're running.
Habitica
- iBreaker/habitica-mcp-server Tasks and checklists are the productivity half; pets, mounts, shop, and skills are the rest. 8 capability domains in one server, all gamified.
TaskWarrior
- awwaiid/mcp-server-taskwarrior Wraps the local
taskbinary. Set up TaskWarrior once, get an LLM-friendly interface for free. - acebaggins/taskwarrior-mcp Real-time updates and prompt scaffolding so the model knows what to do next without you spelling it out.
- meirm/taskwarrior-ng A full web app on top of TaskWarrior, plus MCPO to expose the same MCP server as REST. Useful when you want both interfaces.
Amazing Marvin
- bgheneti/Amazing-Marvin-MCP Daily overview, time-range analytics, label/tag filters, time tracking. Smithery one-line install.
- LucaDeLeo/amazing-marvin-mcp Smithery-hosted, FastMCP, ten tools. The lowest-friction way to try Marvin's MCP at all.
Remember The Milk
No native community MCP server. RTM users currently rely on Zapier's MCP wrapper for Remember The Milk actions. Genuine gap if you want to fill it.
Time-blocking & calendars
Sunsama
- Official: api.sunsama.com/mcp Hosted, OAuth, Streamable HTTP. Tasks and workflows, no setup beyond authorize.
- robertn702/mcp-sunsama 15 task tools with GitHub and Gmail integrations baked into
create-task. Stream and group operations included; HTTP-Basic-Auth option for self-hosted setups.
Reclaim.ai
- johnjhughes/reclaim-mcp-server 14 task-lifecycle tools. Documents the COMPLETE-means-scheduled-block-ended trap so you don't fall in it.
- universalamateur/reclaim-mcp-server 40 tools across tasks, calendar, habits, focus time, and analytics. The biggest Reclaim surface you'll find.
Motion
- h3ro-dev/motion-mcp-server Built-in rate limiting that self-throttles to a conservative 12 requests every 3 minutes (well under Motion's 12-per-minute cap) so you don't get throttled mid-loop. SQLite persistence across restarts.
Routine
- Official First-party local server (
npx routine-mcp-server; needs the Routine desktop app running and Node 18+). Calendars, tasks, and notes from the daily-planner app.
Project Management
Asana
- Official:
mcp.asana.com/v2/mcpStreamable HTTP, OAuth 2.1, GA in early 2026. The V1 SSE endpoint died May 11, 2026; if you're still pointing there, you're broken. - roychri/mcp-server-asana
READ_ONLY_MODEif you don't trust the LLM yet, custom-field operations if you do. ~137 stars and still active. - n0zer0d4y/asana-project-ops Enterprise fork of roychri with batch operations, direct section assignment, and selective tool activation.
ClickUp
- Official:
mcp.clickup.com/mcp~50 tools across 14 categories, OAuth 2.1 with PKCE. No delete tools, intentionally. Rate limits depend on plan and the Everything-AI add-on. - taazkareem/clickup-mcp-server Multi-account, hybrid OAuth/API-key, fuzzy global search, persona-based tool filtering. The community option people stayed on after ClickUp went official.
- hauptsacheNet/clickup-mcp Three modes (read-minimal, read, write) and append-only descriptions, so the LLM can't blow away your notes by accident. Image support with size budgeting for token-conscious agents.
Linear
- Official:
mcp.linear.app/mcpIssues, projects, milestones, comments, teams, cycles, initiatives, roadmaps, documents. Full surface, OAuth 2.1. - tacticlaunch/mcp-linear Goes deeper than the official: cycles, milestones, roadmaps, saved views, templates, custom fields, webhooks, audits, rate-limit health checks.
- dvcrn/mcp-server-linear Multi-workspace via tool prefixing. The right pick if you run Linear across several agencies or clients. (Lightly maintained; last updated April 2025.)
Jira / Confluence (Atlassian)
- Official:
mcp.atlassian.com/v1/mcp(Rovo) Cloud-only but covers Jira, Confluence, Compass, and Bitbucket Cloud in one server. SSE endpoint deprecates June 30, 2026. - sooperset/mcp-atlassian 5,000 stars and 72+ tools across Jira (Cloud + Server / Data Center) and Confluence. The only good answer for self-hosted Jira. Patch to v0.17.0+ for the Feb 2026 RCE/SSRF fix.
- aashari/mcp-server-atlassian-jira Five generic HTTP tools that hit any Jira API endpoint, with TOON responses for 30β60% token savings on big issues.
Monday.com
- Official: mondaycom/mcp Hosted at
mcp.monday.com/mcp, OAuth 2.1. Boards, items, columns, groups, plus Dynamic API Tools that give you full GraphQL access on the fly. - Prat011/mcp-server-monday Python via uvx, Smithery-installable, Docker option. Pragmatic and quick. (Formerly
sakce/mcp-server-monday; the repo was transferred, not forked.)
Notion
- Official: makenotion/notion-mcp-server 4,257 stars. v2.0 uses the data-sources abstraction from API 2025-09-03. Notion is steering toward the hosted
mcp.notion.com/mcp. Heads-up: there's an open prompt-injection-via-page-content advisory (#238 at last check). - suekou/mcp-notion-server Markdown conversion to cut tokens, tool allowlist via
--enabledTools. The community server that makes Notion responses LLM-readable. - awkoy/notion-mcp-server Production-positioned: Zod-validated, batch operations, comments, search, archive/restore.
Trello
- GabrielRamirez/trello-mcp 73 tools across nine categories, Docker-ready, remote HTTP support. The most thorough Trello server in the catalog.
- delorenj/mcp-server-trello Built-in token-bucket rate limiting (300/10s per key, 100/10s per token) and persistent board switching. Actively maintained (SSRF protection and due-reminders landed mid-2026).
- adriangrahldev/advanced-trello-mcp-server Production-hardened HTTP layer: keep-alive, exponential-backoff retries with jitter, batch tools, attachment downloads.
Shortcut
- Official: useshortcut/mcp-server-shortcut Hosted at
mcp.shortcut.com/mcp(OAuth) or local stdio (PAT). Stories, epics, iterations, objectives, docs, custom fields. Ship-safe withSHORTCUT_READONLY=trueand aSHORTCUT_TOOLSallowlist.
Wrike
- Official:
mcp.wrike.comHosted. Task queries, folder/project navigation, prioritization, and meeting-to-task conversion.
Smartsheet
- Official Hosted. Sheet read/summarize, row CRUD, attachments. Requires a Business / Enterprise / Advanced Work Management plan.
- josh-cornett/smartsheetmcp TypeScript, Streamable HTTP and SSE, broad endpoint coverage with documented pagination so the LLM doesn't silently truncate your sheets.
- terilios/smartsheet-server Healthcare-analytics flavor: clinical-note summarization, sentiment, batch analysis on top of Smartsheet.
Plane
- Official: makeplane/plane-mcp-server 100+ tools across ~19 modules. OAuth at
mcp.plane.so/http/mcp, PAT atmcp.plane.so/http/api-key/mcp.
Basecamp
- georgeantonopoulos/Basecamp-MCP-Server 79 tools, OAuth 2.0 with auto-refresh, chmod-protected secrets. The most complete Basecamp 3 option.
- BusyBee3333/basecamp-mcp-2026-complete 50+ tools targeting Basecamp 4 specifically. (New and lightly proven.)
- No official Basecamp MCP; the company hasn't shipped one.
Backlog (Nulab)
- Official: nulab/backlog-mcp-server First-party. Project, issue, wiki, attachment management.
- katsuhirohonda/mcp-backlog-server Adds prompts and analytical templates so the LLM has a starting posture. (Low adoption, quiet since early 2025.)
Dart
- Official: its-dart/dart-mcp-server Native MCP for Dart's AI-first PM platform. Tasks, docs, projects. (The local server is now deprecated in favor of Dart's hosted MCP.)
Fibery
- Official: Fibery-inc/fibery-mcp-server Natural-language interaction with Fibery workspaces. Python. (This local server is deprecated; Fibery now hosts one at
mcp.fibery.io/mcp.)
Taskade
- Official: taskade/mcp Projects, tasks, workspaces, OAuth.
Notes
Notion
See Project management above.
Obsidian
- MarkusPfundstein/mcp-obsidian ~3,472 stars. Connects through the Local REST API plugin. Where almost everyone starts.
- bitbonsai/mcpvault ~1,133 stars and lightweight. Picks up speed when MarkusPfundstein's gets too heavy.
- StevenStavrakis/obsidian-mcp ~693 stars with a broad tool surface. Fits well alongside Templater-driven vaults.
For the Obsidian Tasks plugin specifically, jfim/obsidian-tasks-mcp parses both emoji and Dataview syntax directly from markdown, no REST API needed.
Logseq
- ergut/mcp-logseq Hooks into Logseq's Local HTTP API, with optional vector search via local Ollama. DB-mode supported, tag-based privacy excludes work fine.
- eugeneyvt/logseq-mcp-server Search/Get/Edit/Delete unified-tool architecture, template enforcement, soft-delete safety. Fewer tools, fewer ways to misfire.
- joelhooks/logseq-mcp-tools TypeScript. Journal summaries, graph analysis, DataScript natural-language queries. Closest thing to a research assistant for your Logseq graph.
Roam Research
- 2b3pro/roam-research-mcp Comprehensive API access to Roam graphs. Block references, queries, page CRUD.
Apple Notes
- sirmews/apple-notes-mcp Read-only: lists and searches by reading the Apple Notes SQLite database directly (needs Full Disk Access). No creating or editing. (Archived since late 2024.)
- RafalWilinski/mcp-apple-notes Semantic search via a LanceDB vector store. The one to pick if you've been hoarding Notes for years and want to query them like a brain.
Bear
- netologist/mcp-bear-notes Reads Bear's SQLite directly: search by title, tag, or content. K8s/code/YAML helpers built in.
- akseyh/bear-mcp-server Plain text search over your Bear library, straight from the SQLite. No embeddings.
Airtable
- domdomegg/airtable-mcp-server PAT-scoped, schema discovery, read/write, search, comments. Distributed via .mcpb (Claude Desktop extension), pre-listed in Anthropic's MCP Registry.
- rashidazarang/airtable-mcp v4 with 42 tools: full CRUD, comments, schema, webhooks, batch ops, AI-prompt templates.
- jordan-huffman/airtable-mcp-server Fixes the "everything is a string" gap of the popular forks: proper handling of single-select, date, formula, and checkbox fields.
Dev
GitHub Issues + Projects
- Official: github/github-mcp-server ~29,200 stars; one of the most-starred MCP servers anywhere. Local binary, Docker, hosted remote variant. Watch out: the
projectstoolset is off by default. FlipGITHUB_TOOLSETSor--dynamic-toolsets. - taylor-lindores-reeves/mcp-github-projects Pre-dated official Projects support. Auto-generated GraphQL types and an
ALLOWED_REPOSwrite-restriction list make it good for sprint workflows. - idosal/git-mcp Turns any GitHub repo into a doc/code source for retrieval. Not for issue management; the right tool for "what does library X actually do."
GitLab
- Official: GitLab Duo's built-in MCP server Issue + MR creation and code search since GitLab 18.5; assignees, reviewers, labels, and milestones added in 18.8. Works on Cloud and self-managed.
- zereight/gitlab-mcp The community wrapper to reach for when Duo isn't an option.
- nguyenvanduocit/gitlab-mcp A lighter, more selective alternative; zereight's is the one with the broader API surface.
Bitbucket
- Official (via Atlassian Rovo) PR lifecycle, pipelines, deployments, all in the same Atlassian server. API-token only; no Bitbucket OAuth.
- b1ff/atlassian-dc-mcp Purpose-built for Atlassian Data Center, with OS-keychain secret storage. Separate
@atlassian-dc-mcp/{jira,confluence,bitbucket}packages. - aashari/mcp-server-atlassian-bitbucket Generic-tool design: a few HTTP-method tools that hit any endpoint. Sister project to aashari's Jira server.
YouTrack
- tonyzorin/youtrack-mcp ARM64 + AMD64 Docker images on ghcr.io and Docker Hub. The path of least resistance for self-hosted YouTrack.
- GaijinEntertainment/youtrack-rocket-mcp Async Python FastMCP with smart field caching. Faster than the alternatives on big projects.
Redmine
- runekaagaard/mcp-redmine Closest to 100% Redmine API coverage. ~172 stars, quiet since January 2026.
- jztan/redmine-mcp-server 45 tools, every auth mode (API-key, Basic, OAuth2), prompt-injection protection, Docker. OAuth2 wants Redmine 6.1+.
Taiga
- talhaorak/pytaiga-mcp Epics, user stories, tasks, issues, sprint tracking, verbosity controls. The Taiga server you'll actually keep installed.
OpenProject
- AndyEverything/openproject-mcp-server Python async with a 23-parameter work-package filter. Made for the people who actually use OpenProject's filter UI.
Vikunja
- 0xK3vin/vikunja-mcp 11 capability domains: kanban, relations, views, notifications, teams. The polished pick.
- democratize-technology/vikunja-mcp API-token + JWT auth, smart hybrid filtering that falls back to client-side when the server can't help. Cleaner architecture than most.
- aimbitgmbh/vikunja-mcp Safety controls (
ENABLE_PROJECT_DELETEetc., default false because Vikunja has no trash). Tested withgpt-oss:20bif you're going local.
Generic / Self-Hosted
These don't wrap an external SaaS. They are the task system, designed for AI workflows from the start.
- cjo4m06/mcp-shrimp-task-manager ~2,087 stars. Chain-of-thought, reflection, style consistency, all wired into a task store the agent can plan against.
- eyaltoledano/claude-task-master (TaskMaster) The one most coding agents reach for in IDE workflows.
- eyalzh/kanban-mcp Kanban for multi-session AI workflows. Useful when several agents are working in parallel and you need a board to mediate.
Back to Checking Boxes
I still abandon my TODO list. I'll ignore it for a week, miss a project, let it drift. The difference now is that catching up isn't a weekend of grunt work, it's a sentence: "here's what changed, sort it out." The list rebuilds itself, and I get back to doing the stuff I actually wanted to do.