In practice: GitHub shows you how to get the most out of the harness — a clear, repeatable 8-step workflow
- Every day brings a new MCP, a new skill, a new workflow — you can't keep up. The GitHub Blog's July 27 post says stop chasing. Master the AI coding tool you already have and you'll get better results.
- Author Burke Holland does developer advocacy at GitHub and Microsoft, focused on GitHub Copilot, and has led dev-tool advocacy teams. He's sharing the eight-step process he runs every day, using only Copilot's built-in features.
- Before writing any code, he has the AI generate 20 prototypes on a single page for comparison — even for something invisible like "add an API endpoint." His reasoning: you don't know what you want until you see it.
- The final gate is a model from another company critiquing the work: he writes with GPT-5.6 Terra, and Copilot calls in Claude Sonnet to review. Different training data means different blind spots.
- He recommends full-permission mode, but only inside a sandbox: AI investor Matt Shumer once enabled it on his own Mac. A misparsed environment variable led to a recursive delete command that wiped out nearly everything in his home directory.
- The "mostly" in the original title, The harness is all you need (mostly), matters: he installed two skills for this very article — one to grill the plan, one to anchor the design.
The 8-Step Workflow GitHub Lays Out, Walked Through with a Date Picker
The GitHub Blog just published an unusually practical guide to AI-assisted development. It addresses a very real problem: don't let the endless stream of new AI tools, elaborate prompts, and clever tricks make you anxious. What actually makes you dramatically more productive is knowing your harness inside out.
Author Burke Holland does developer advocacy at GitHub and Microsoft, focused on GitHub Copilot. Using "build a date picker component from scratch" as his example, he lays out a clear, repeatable eight-step workflow built entirely on Copilot's built-in features — nothing new to install.
Here are the eight steps he runs daily. Click through the tabs to see what each one does:
Pick an entry point — beginners should start with the CLI
The entry points are converging on a single harness. Learn it once, use it everywhere.
Turn off the approval prompts — but only inside a sandbox
No autonomy, no productivity. But full permission demands an isolated environment.
/allow-all (alias /yolo)
Ask for 20 prototypes on one page
You don't know what you want until you see it.
Give me 20 mocks for a date picker web component…
Enter plan mode and let it surface the edge cases
Vague requirements are fine — that's exactly what this step is for.
/plan Build a date picker web component…
Approve the plan and let Autopilot run it
A built-in loop that keeps the model working until every item on the plan is done.
Review it yourself — don't accept "good enough"
What comes out usually isn't what you want. Your taste sets the quality bar.
Bring in a model from another company to critique it
Different training data means different blind spots.
Perform a rubber duck review on…
Commit — and start a new session when you change topics
Keep sessions focused on one subject. When you've drifted too far, it's time to switch.
Step 1: Pick an entry point — beginners should start with the CLI
The GitHub Copilot family alone has a pile of entry points: the CLI, the new GitHub Copilot desktop app, VS Code, Visual Studio, JetBrains — and that's just a few.
Here's the good news: these entry points are converging on a single harness. The details differ, but the core flow is the same: learn it once, use it everywhere.
For beginners, he recommends the CLI. The reasoning: to learn the harness, get as close to it as possible. The terminal is pure text — no UI to learn. You type a line, the agent works, and the interaction is more direct and immediate. His words: "Honestly, it's just more fun."
For this demo, he used the new GitHub Copilot desktop app. It's built on top of the Copilot CLI and runs on macOS, Linux, and Windows. Its big feature is running multiple agent sessions at once, each in its own git worktree and branch, without interference. There are three session modes, which map neatly to the steps ahead:
| Session mode | Who's in charge |
|---|---|
| Interactive | Back and forth — it acts, then waits for your input |
| Plan | It proposes an implementation plan; you review and approve |
| Autopilot | You step back; it runs step by step until the task is done |
Step 2: Turn off the approval prompts — but don't do it on your own machine
YOLO mode (you only live once — the programmer's "screw it" shrug), officially called Allow All, varies a bit by tool. Usually you just type /allow-all in the chat; /yolo is an alias for the same command. Once it's on, the agent runs whatever commands it wants, no more step-by-step asking.
His argument for turning it on: the agent needs autonomy before you'll see a real efficiency gain. If you have to approve every action, you might as well do it yourself. And sitting there clicking "approve" all day is a miserable experience. Worse, click enough times and you train yourself to approve without looking — at which point the approval gate is pointless.
He then drops a link to a July 10 tweet. Matt Shumer is an active AI investor and former CEO of the AI writing product HyperWrite. He was running GPT-5.6 Sol on his own Mac. While the agent was doing a file cleanup task, it assembled a recursive delete command (rm -rf) that wiped out nearly everything in his home directory.
I'm angry… the OpenAI team is looking into this, but stuff like this should have happened with GPT-3.5, not a frontier model in mid-2026 running at the highest reasoning tier.
Matt Shumer, 2026-07-10
His conclusion: YOLO is fine — just not on your machine. Especially at work, where data lives on corporate systems and a mistake is expensive. If you're going to do it, use a sandbox: an isolated, disposable environment where a wipe won't touch your own files. Easiest options are GitHub Codespaces (cloud dev environment) or a dev container (a container-isolated environment on your machine).
Four permission levels, from read-only to full auto
This is the layer that decides whether you save time without losing sleep. The Copilot CLI doesn't ask about everything by default: read-only operations — searches, reading files, running read-only commands — are auto-approved. The things that need a nod are system-changing actions: destructive commands, writing files, hitting URLs.
Between "ask every time" and "full auto" there are a few more rungs:
| Level | Does it still stop? | When to use |
|---|---|---|
| Default | Read-only ops auto-approved; file edits, destructive commands, and URLs ask each time | Working on your own machine |
| --allow-all / --yolo | No more asking for permitted actions; but at decision points, it still stops to ask how you want to proceed | Letting it run wild inside a sandbox |
| --no-ask-user | No more clarifying questions — it decides on its own; but won't auto-continue to the next step | You don't want to be pestered, but also don't want it burning tokens endlessly |
| autopilot mode | It runs step by step until the task is done; without full permissions it can't do anything requiring approval | You have a clear plan and want it done in one go |
It gets finer still. --allow-tool='shell(git:*)' --deny-tool='shell(git push)' means "all git commands are fine, just no pushing." One rule to remember: deny rules always override allow rules — even when --allow-all is on.
Step 3: Prototype first — you don't know what you want until you see it
One of the most magical things about AI right now is how cheap early prototyping has become. Prototyping used to be a full project phase, often a luxury. Now it's a single sentence.
Take the date picker component. Sounds simple, but there are a ton of questions waiting: how does navigation work inside the component? What does a selected date look like? What about a selected range? How does the user switch between days, months, and years?
His move: ask for 20 in one sentence.
Give me 20 mocks for a date picker web component. Put them all in an HTML file so I can compare.
Among the 20 was one that starts from a year view — the "Year at a glance" on the left. He saw it and realized: this is what I want — let users zoom from year to month to day.
These are the kinds of things you don't consider until you see them.
These are the kinds of things you don't consider until you see them.
Humans process images, shapes, and visible layouts far faster than dense text. Low-cost visual prototypes make complex concepts instantly intuitive.
Even the invisible stuff gets drawn first
He needed to add an API endpoint — an interface for programs to call each other. There's no UI to look at. He asked for a visual prototype anyway.
Create a visual mockup of the API for this project. Add five options for how we could handle a new API endpoint that allows the user to download their analytics data.
The GitHub Copilot desktop app supports Mermaid diagrams — a way to describe flowcharts in text, where a few lines render into boxes and arrows, so the AI can literally "write" a diagram. It turned the five options into a tree on the spot.
Picking a model: the middle tier, and never switch mid-task
His recommendation: use a mid-tier model for most everyday work — GPT-5.6 Terra or Claude Sonnet — with medium reasoning. The GPT-5.6 generation landed in Copilot on July 9 with three models: Sol (strongest reasoning), Terra (balanced), and Luna (lightest and cheapest). The Terra he recommends is the middle one.
His second piece of advice is worth more: for the same feature or the same bug, don't switch models or reasoning tiers mid-task. The reason is prompt caching — the model keeps your previous conversation cached so the next request is cheaper. Switch models or tiers, and the cache is invalidated. You're back to square one.
Step 4: Enter plan mode and let it surface the questions you didn't think of
Now you know what you actually want, not what you initially thought you wanted. Time for an implementation plan.
No new session needed. Just switch to plan mode.
/plan Build a date picker web component. I want the user to be able to zoom in and out of years, months, and days.
He admits the prompt is pretty vague. That's fine — this step exists precisely for that.
In theory, if you could assemble the perfect prompt, the perfect context, in the perfect order, the model could nail it on the first try. In theory. None of us can. Plan mode gets you closer to that ideal by surfacing, one by one, the questions you'd eventually have to answer if you were doing this by hand.
Here's what those questions look like. Each one decides something concrete:
Can the start and end date be the same day?
Decides whether "pick a single date" and "pick a range" share the same logic. If same-day is allowed, the code has to handle a zero-length range.
Does a half-made selection count?
If the user picks a start date and leaves without picking an end date, does that state get saved, and does it leave a trace in the UI?
Can the user clear a selected date?
Decides whether there's a "clear" button, and whether clearing resets to empty or back to the default date.
Should "today" always be front and center?
Decides whether there's a persistent "today" entry in the UI, or whether you have to navigate to the current month to find it.
Is manual entry allowed?
If yes, you have to handle messy input formats and decide how to signal errors.
What format are dates stored in?
Decides how the component integrates with other systems. String or timestamp? Does a timezone shift cause off-by-one-day bugs? All in this question.
Can dates be pasted in?
Different from manual input: pasted content may carry another format and needs separate handling.
There's a long tail of questions like these. You can't think of all of them, but the model can surface quite a few.
If you just accept every answer, you've defeated the purpose of planning. The value is that it forces you to think through each detail yourself — what you want and what you don't, decided on the spot.
You can push back, too
He had a rough idea of what the model meant, but asked anyway to make sure both sides were on the same page. Interjecting with a question doesn't interrupt the planning flow — it just keeps going.
Want it to push harder? Install a skill made for grilling
Install Matt Pocock's grill-me skill — the name means "grill me" — by one of the most well-known TypeScript educators. Chain the two commands together and the questions get far more numerous and far sharper. The skill's job: one question at a time, digging into the plan until you and the agent agree on every branch. (This is the first skill he used in the article.)
/plan /grill-me Build a date picker web component. I want the user to be able to zoom in and out of years, months, and days.
Step 5: Approve the plan and let Autopilot run it
Once the plan is done, GitHub Copilot usually offers to switch to Autopilot to implement it.
Autopilot is a built-in loop. It keeps the model working by checking whether it has actually finished what it said it would — here, every item on the plan.
At this stage, Copilot automatically acts as the orchestrator: when it needs to read files in the codebase, it dispatches "Explore" subagents with a small model; when an action looks more complex, it usually dispatches a "General Purpose" subagent with a large model. If you want fine-grained control, you can use custom agents and custom instructions. But even if you do nothing, you still get the benefit of multiple subagents and models working together — even if you had no idea they existed.
When Autopilot stops
Autopilot stops in four situations: it thinks the task is done, it hits a problem it can't get past, you press Ctrl+C, or it reaches the maximum continuation count you set. That last one is controlled with --max-autopilot-continues, designed to prevent infinite loops. It's especially important in scripts, since you won't be there when things go wrong.
There's also a safety design that explains why the last step and this one go together: in autopilot mode, unless you've explicitly granted full permissions, it can't do anything requiring approval. Without enough permissions, it just keeps hitting auto-denies and never finishes the job.
Step 6: Review it yourself — don't accept "good enough"
This is the fun part: you finally see what the AI made.
But it probably won't be exactly what you wanted. That's normal. The model can't read your mind, and it makes mistakes. You have to go back and forth until it's actually what you want. Whether it's code or UI, your taste sets the quality of the final product.
Four problems he spotted immediately:
- Inconsistent animations
- Hover text on a selected date is hard to read (insufficient contrast)
- No need for "12 YEARS" at the top
- Clicking "Today" doesn't jump to that day if you're in month or year view
- He didn't love the design — it looked too much like AI made it. Because it did.
He used his own CSS framework, Postrboard — a design system with 40+ components — installed as a skill for the agent. The skill just points to where the CSS lives and how to use it. You don't need his. Pick any CSS framework you like; giving the model some design direction is hugely useful, and often a CSS framework is enough. (This is the second skill he used in the article.)
Then he fired off a string of feedback, completely unedited:
ok - we don't need a landing page here - just the component, output and settings panel in a minimal setting. Use the /postboard skill for the design and colors. For the date picker, when I click on the day, it tries to zoom in, but can't because there is nothing to zoom to. There should be no zoom there. It doesn't need to say "Zoom Out" at the top When I mouse over a month or year that contains the selected day, I cannot read the hover text. When I click "Today" it should take me to that day view, even if I'm on the month or the year. The months don't need numbers under them and they don't need to be in boxes Same goes for years. And it doesn't need to say "12 years" at the top."
(His original text spells the framework name /postboard, missing an "r" — it's actually Postrboard.)
Notice how conversational this is. Don't overthink it. When you're fixing a bunch of small things, just talk to the model. If you have the context, you have the prompt.
Notice how conversational this is. Don't overthink it.
Don't accept "good enough" AI output. Demand quality, and be relentless about it. The responsibility is still on you. Being able to tell what's good from what isn't is part of the value you bring. AI will never replace human taste and creativity.
Step 7: Bring in a model from another company to critique it
Once you're happy with the changes, call for a rubber duck review. No special format needed. A plain sentence does it.
Perform a rubber duck review on this date picker component implementation
Here's the mechanic: GitHub Copilot finds a model from a different family than your current session model — in practice, that means a different company. He was using GPT-5.6 Terra, so it brought in Claude Sonnet to review. The logic is simple: different models are trained on different data, so their blind spots differ. A model reviewing itself tends to miss the same things.
The duck looks but never touches — even critique has boundaries
The rubber duck is a built-in agent: read-only, no file changes. It only gives feedback; whether to act on it is up to the main agent and you. Its feedback comes in three tiers: blocking (can't ship without fixing), non-blocking (should fix, usable as-is), and suggestion (low priority, genuinely useful). It's also explicitly told not to nitpick formatting, naming, or comment syntax — things that don't affect the actual problem. If it finds nothing, it says so.
It's not just for the final step. Prototypes can be reviewed, plans can be reviewed — it's up to you where you want a second AI's opinion.
Its best moment is after the plan is done but before any code is written — that's when changing direction is cheapest. Beyond that, three other good moments: mid-implementation to check for blind spots, after tests are written to verify coverage, and when something keeps failing — get a fresh mind on it instead of trying the same angle repeatedly. For small changes, it usually skips the review to stay out of the way.
You can also call it manually at any time: just type /rubber-duck what edge cases are still missing?
Rubber ducking is an old trick in software: you explain your code or your thinking to an inanimate object — traditionally a rubber duck. The simple act of saying it out loud often reveals the flaw to you. The difference here is that this duck talks back, and you can act on its feedback directly.
Go further: let two models hammer each other
The rubber duck and Autopilot can be chained into a loop.
/autopilot rubber duck this date picker implementation. When you have the result, review it carefully and make any necessary adjustments. Repeat the rubber duck review until both you and the reviewing model agree that the only items that remain have diminishing returns.
It costs more tokens. But as he puts it, you're using two models to hammer the code into shape — which is really saving your future self from stepping on the same rakes.
Step 8: Commit — and start a new session when you change topics
When it's done, commit. Or keep adding the next feature to the same change. He also has a session-management tip: if the next task is unrelated, start a new session. Sessions should be organized by topic. When you've drifted far off track, that's usually a sign to switch.
Here's the finished product — zooming from year to month to day, with the component on the left and a live-updating settings panel on the right:
He admits the example is a bit contrived — but it still makes you pause. The date picker used to be one of the hardest front-end jobs. Ask anyone who's built one.
He Said No Skills Needed — Then Installed Two
The article opens with "If you feel overwhelmed by AI right now, you're not alone," then lists the never-ending parade: new tools, new MCPs, new skills, new workflows, and the eternal "Look! I figured out AI with this one weird prompt!" His reply is one line:
I…don't believe you.
I…don't believe you.
He uses AI every day, and his conclusion is the fewer things you install, the deeper your understanding, the better your results. Plugins, rules, tricks to coax the agent into doing more — all interesting, but to him they're parlor tricks. What actually moves the needle is how he uses the harness and how well he knows it.
He has a line about the garbage flooding the market, too: ask an agent to generate a skill and it will happily produce one. Whether it actually works is another question. And that thing can be posted to any skill marketplace or MCP registry.
He doesn't take a hard line. He says it explicitly: later, when you're defining complex workflows or automating for a team, skills, MCPs, custom agents — all of that will matter. "In fact, I used a few in this very article!" His point is only this: without any of it, you can still use AI extremely well.
His closing summary has three layers:
First, a simple workflow is enough for most people. Simple has a side benefit: when you're running several things at once, it's easier to tell what state each agent is in and where you left off. Your context window only holds so much — a model can only remember so much at a time.
Second, the AI space has no ceiling: MCPs, skills, instructions, custom agents, workflows, loops, letting agents prompt agents, standing up an entire virtual dev team — all of it is on the table.
Third, and last, his final line:
Nobody really knows what they're doing right now. We're all figuring it out as we go. Many of today's magic incantations will become tomorrow's cautionary tales.
nobody really knows what they are doing right now.
Look back at that "mostly" in the title. It carries weight. Throughout the article, he used two skills: Matt Pocock's grill-me to interrogate the plan, and his own Postrboard to anchor the design. He admits as much in the opening disclaimer.
So the real meaning of "the harness is all you need" is this: you don't have to chase every new thing that appears each day. The built-in features of the tool you already have are enough to do excellent work. When you actually hit a complex workflow that needs automation, that's when you add the extras.
GitHub's Own 8-Step AI Coding Workflow: No Plugins, All Built-In Features
GitHub developer advocate Burke Holland walks through building a date picker from scratch, covering all eight steps. This page tells the whole story with visuals.
↓ One page · includes an animated diagram
New plugins, skills, and prompts appear every day — you can't chase them all. The GitHub Blog's July 27 post offers the opposite answer: stop chasing. Master the AI coding tool you already have. By "the tool itself," he means the harness — the system around the model that decides which tools it can call, when it stops to ask you, and how it breaks a task into steps.
All 8 steps, start to finish
Multiple subagents with different models split work automatically
Have another company's model review your code
Defining complex multi-step workflows
Automating for a whole team
His example is a date picker — that little control you click to pick a date on the web. Sounds simple, but a ton of questions hide inside: how do you switch between years, months, and days? What does a range selection look like? Can you type a date manually?
Prototyping used to be an entire project phase — building even one version was a luxury. So most people wrote code straight from the image in their head and realized halfway through that it wasn't what they wanted.
One version had to fit into the project schedule; usually it got skipped, and you wrote code from imagination, realizing only halfway that it wasn't right.
One of the 20 started from a year view. He saw it and realized what he actually wanted: zoom in year → month → day. You don't know what you want until you see it. Even for something invisible like "add an API endpoint," he had the AI draw five options as a tree before choosing.
He recommends turning off the "approve this step?" prompts entirely and letting the AI run whatever commands it wants. His reasoning: if you're approving every step, you might as well do it yourself — and approve enough times, and you train yourself to click without looking, which makes the whole gate pointless. The catch: do it somewhere else.
There's one more gate after you're satisfied: a single plain sentence triggers a "rubber duck review," and the tool automatically picks a model from a different family than your current session. He writes with GPT-5.6 Terra; the reviewer is Claude Sonnet. Models trained on different data have different blind spots. Self-review tends to miss the same things.
The name comes from an old software tradition: you explain your thinking to a rubber duck, and the simple act of speaking often reveals the flaw. The difference: this duck talks back. The best time to call it is after the plan is done and before code is written — that's when changing direction is cheapest.
That flow, the seven copy-paste-ready prompts, and the numbers (20 prototypes, 7 edge cases) are all from Burke Holland's GitHub blog post. The permission levels and the duck's three feedback tiers come from GitHub's official docs. He does developer advocacy at GitHub and writes about his own product — but the method is tool-agnostic.
- × New MCP — three more today
- × New skills — you'll fall behind without them
- × New workflows — a day spent and still not working
gives the opposite answer:
master the tool you have.
build a date picker from scratch
all on one page to compare.
Year → month → day. That's it.
One recursive delete command.
1 hr 21 min before anyone noticed.
Home directory: almost gone.
Disposable environment —
even a full wipe can't touch your files.
The reviewer: Claude Sonnet.
Different blind spots.
Read-only —
doesn't touch a single file
of the original title
One to anchor the design.
He admits it in the opening.
Grill every edge case before you start.
Find a different pair of eyes before you ship.
Members can copy or download the full Markdown, and let their AI subscribe and ask.
Found this useful? Leave your email — every new explainer, the moment it's out. Unsubscribe anytime.