AI Co-Lab Speaker Series — Masterclass on Vibe Coding

From Vibes
to Value

How to be the human in the loop —
live with Claude Code

Paul KeckLMU Munich
16.10.2026
Werksviertel München
Before anything else

How do you
write code these days?

QR code for the live poll
scan · one tap · done
the answers grow on this screen
poll.paulkeck.de
The kickoff

One prompt. Then it works alone.

Build the feedback app for this talk — the audience
will use it on their phones in about 15 minutes.

What I want: one mobile page — rate this talk (1–5),
one question, an optional comment. /results: live bars,
projector-friendly. Free text never appears there.

Follow CLAUDE.md for stack, design and the
non-negotiables.

When you are done: push, wait for the deploy, verify
the live URL with curl, then report back in one line.
⏎ sent — the agent is working now
  • Intent — what & for whom, not how
  • Constraints — live in the repo. Onboarding, not prompting
  • Verification — done means proven, not plausible
six lines.
we check back in a few minutes.
My five years

I started CS in 2021 —
the last cohort to learn coding without AI.

2021
Autocomplete
Copilot previews the summer I enroll. We still learn from Stack Overflow & exercise sheets.
2022/23
Chat
ChatGPT lands mid-degree. Copy, paste, adapt — the tutor that never sleeps. Universities debate bans.
2024
The IDE
Cursor & friends. AI moves into the editor — you dictate, it types.
2025
Agents
Claude Code ships. “Vibe coding” gets a name. You stop dictating — you delegate the ticket.
2026
Fleets
Agents in the cloud and in CI, working while you do something else.
My day job, 2026
INC0847219  Nightly order-export job failing — queue stalled P2 · In Progress
02:14  monitoring — created · export queue stalled, 4,112 orders pending
02:16  automation — routed to Claude (triage agent)
03:07  Claude · work note — Root cause: expired service-account token on the SFTP target. Proposed fix attached; replayed the batch against staging: 4,112/4,112 exported. Awaiting sign-off.
08:31  P. Keck — first human view

The incident reaches the agent before it reaches me. My job starts at the sign-off.

recreated for this slide — the real ticket has customer names in it
Adoption

Where the industry actually is

  • Stack Overflow Developer Survey 2026: two thirds of developers now use coding agents — a year ago it was one third. Claude Code is #1 at 66 %, ahead of Copilot. (published Oct 6 · ~30,000 respondents)
  • The trust paradox: 63 % rarely or never let agents run fully autonomous. Usage doubled. Trust didn’t. (same survey)
Source: Stack Overflow Developer Survey 2026 — survey.stackoverflow.co/2026
Accenture, this morning
Times of India headline: Some Accenture employees spent $1,000 a month on Anthropic's Claude AI, the company will now pay only $29
Times of India, Oct 16, 2026 · original reporting: 404 Media, Oct 15
One subheading further down
Article section: Anything above $29 now gets charged to a project budget — funded through a Work Breakdown Structure (WBS)

The costs didn’t disappear — they moved into the client projects.

Times of India, Oct 16, 2026 · original reporting: 404 Media, Oct 15
Fresh from GitHub trending: the “Photoshop killer”
64,354 ★
— the repo is 16 days old.
GitHub repo storytold/photocraft: 64.4k stars, 11.2k forks, 1.4k issues — an open-source photo editor written by scratch in pure Rust
“Tested it: very broken software produced by AI … you may well call it deceptive.” — first tester, Hacker News, Oct 4 · 3 of 56 of its own performance budgets pass

The stars measured the story, not the software. Stars are vibes too.

The catch

Vibes aren’t value.

Agent code almost always looks right. It compiles, the demo works, and the bug is already in the diff.

Generating code has become cheap. Verifying it has not. The bottleneck moved from writing to judging — and judging is now your job.

“I ‘Accept All’ always, I don’t read the diffs anymore.” — the Feb 2025 tweet that coined “vibe coding”. One year later its author retired the term himself, for “agentic engineering”: orchestration with oversight and review.
The loop

Where the human actually sits

the agent owns one box. you own the loop.
Not a coding thing: the same loop runs for contracts, reports, analyses — code is just where it’s most visible today.
What people underestimate

Three things that change the outcome

  1. 1
    Context is onboarding, not prompting. The agent is the best new hire you’ve ever had — permanently on day one. Conventions, constraints and no-gos live in the repo. That’s why my prompt was six lines.
  2. 2
    Steer at the plan, not at the diff. Ten seconds on the plan save ten minutes on 800 generated lines — the wrong architecture is cheapest to catch before any code exists.
  3. 3
    Give it a way to verify itself. Tests, a URL to curl, a screenshot. “Done” without proof is a vibe. That’s why the prompt ends with: verify, then report.
delegation is a skill.
The honest part

Where it breaks

  • Regulated systems. In finance, traceability isn’t overhead — it is the product. Generation speed was never the constraint.
  • Review bandwidth. If one agent produces what five developers used to, review becomes the bottleneck — speeding up generation makes it worse, not better.
Harvard × Jellyfish telemetry, 2026 — 718 companies, 700,000 engineers

More code is not more software.

+30 %
code output
with coding agents
±0
resolved issues
(no significant change)
+49 %
time from PR
to merge

The bottleneck isn’t generation anymore. It’s the review queue.

Chen & Stratton (Harvard), working paper Aug 2026 — Jellyfish data 2021–2026 · fion.ac/jellyfish.pdf
Meta Engineering, yesterday — their own section heading:

“From human-in-the-loop
to human-on-the-loop.”

Engineering at Meta: How Meta Built Forum With AI-Native Engineering, posted October 15, 2026

“The agent runs the iteration itself … the engineer sets the goal, steps in when it drifts, and approves the result.”

a full app, feature parity with Facebook Groups in eight weeks

On the loop, not out of it: “Every shipped outcome still carries an engineer’s sign-off.”

Where to stand in the loop

Depends on the task

← the agent runs ityou run every step →
check the result
Bang out a PoC
Agent end-to-end: plan, build, verify, ship. Tonight’s feedback app is exactly this class.
review plan & diff
Clear frontend tickets
The agent does the routine, you own the merge — Meta ran Forum like this for eight weeks.
in every iteration
Touch the core system
Regulated, old, or money-moving code: the human stays in each cycle. Mortgage math, for example.
off the dial
“Rebuild SAP”
That’s not a ticket, that’s a company. 64,354 stars won’t make it true.
For the students

Your starter loop

  1. 1
    A repo with a CLAUDE.md. Write down stack, conventions, what “done” means. Congratulations — you now think like a tech lead.
  2. 2
    Tests + GitHub Actions. CI is the agent’s way to verify itself — green checks before you even open the diff. Free tier; Student Pack covers the rest.
  3. 3
    An agent + the discipline. Let it plan, let it build — then read the diff. Every agent bug is caught with fundamentals: error handling, query cost, null semantics. The basics didn’t become obsolete — they became the job.
the setup takes a weekend. the judgment takes a degree.
15 minutes ago, this was an empty repo

Rate this talk — on the app
that didn’t exist when I started talking.

QR code for the live-built feedback app
built · shipped · verified
your rating grows on this screen
rate.paulkeck.de
From vibes to value

Vibes become value where a human closes the loop.
Tonight that was me — starting Monday, it’s you.

context beats prompts
steer at the plan, judge the diff
you ship it, you own it
Thank youQuestions? Find me at the get-together.
Paul Keck
LMU Munich
Reserve — the agent just wrote this. It works in the demo.
// GET /api/teams/:id/report — quarterly hours report
app.get("/api/teams/:id/report", async (req, res) => {
  const team = await db.team.findUnique({
    where: { id: req.params.id },
  });
  const members = await db.member.findMany({
    where: { teamId: team.id },
  });

  const rows = [];
  for (const m of members) {
    const hours = await db.hours.aggregate({
      where: { memberId: m.id, quarter: "Q3" },
      _sum: { amount: true },
    });
    rows.push({ name: m.name,
                billed: hours._sum.amount * m.rate });
  }
  res.json({ team: team.name, rows });
});
Who sees it?
It compiles. The linter is happy. The demo returns a perfect report.

There are three.
Reserve — plausible, consistent, wrong
// GET /api/teams/:id/report — quarterly hours report
app.get("/api/teams/:id/report", async (req, res) => {
  const team = await db.team.findUnique({
    where: { id: req.params.id },
  });
  const members = await db.member.findMany({
    where: { teamId: team.id },  // ①
  });

  const rows = [];
  for (const m of members) {
    const hours = await db.hours.aggregate({  // ②
      where: { memberId: m.id, quarter: "Q3" },
      _sum: { amount: true },
    });
    rows.push({ name: m.name,
                billed: hours._sum.amount * m.rate });  // ③
  }
  res.json({ team: team.name, rows });
});
  • ① Unknown team? Crash — team is null, nobody checked. A 500 instead of a 404.
  • ② N+1 query. One DB round-trip per member. Fine with 12 members in the demo. Not with 4,000 in production.
  • ③ No hours logged? The sum is null — and null × rate is silently 0. The report looks complete and is wrong.
←/→ slides · N notes · F fullscreen · End = reserve