LAZYCOP

A plugin for IBM Bob

Steer Bob while he works.

You hand Bob a task, then you wait. LazyCop turns the wait into a short question game: Bob says what he assumes, you agree or correct him in one click, and your correction reaches him at his next step, before he writes more code on a wrong guess.

npm i -g lazycop
Read the source

IBM Bob IDE 2.2.0+ · Node.js 20+ · runs on 127.0.0.1

TASK coupon.jsBOBCOINS 3.2/20
ASSUMPTION A1BEFORE EDIT
Bob thinks an expired coupon means its timestamp is before now. Do you?

Bob keeps working while you decide. Try an answer.

Damage report

You find the mistake after you've paid for it.

An agent guesses wrong early, and every step after builds on that guess. You see it when you read hundreds of finished lines. Most review tools look at the code once the agent is done. LazyCop moves the review into the run.

150
Bobcoins (about $75) spent on a simple formatting fix
542
searches in that same run before it was stopped by hand
61 min
of waiting on one task that went the wrong way
66 s
for Bob to take a LazyCop correction mid-task and rewrite his logic

First three figures: IBM Bob issue #3683. Last: our own run on Bob 2.2.0, with no restart and no rework.

Mission briefing

One task, start to finish.

LazyCop is installed once per workspace and stays dormant. It only switches on for a task you start with /lazycop. Every other task is left alone.

  1. Start the task

    Type /lazycop Add coupon expiry to coupon.js. Bob switches to the 👮 LazyCop mode and your browser opens the mission page.

  2. Bob declares

    Before each edit Bob calls declare_step: what he is about to change and what he is assuming. He never waits on you for small things.

  3. You answer

    Each assumption becomes a card with Bob's reading and two or three others. One click. Skipping costs nothing.

  4. Debrief

    At the end Bob lists what he assumed without asking. Disagree with one and he fixes it before he finishes.

AGREE Pick Bob's reading

You both know you read the task the same way. Bob keeps going.

CORRECT Pick another reading

Your answer is delivered at Bob's very next tool call. He changes course without restarting.

ASK Ask Bob why

Bob explains his reasoning before he writes the next line. Or choose Something else… and type your own.

HOLD Hold Bob

Stops his edits while you think. A new dependency, an API change or deleted code holds him on its own until you answer.

Under the hood

It sits next to Bob, not inside him.

LazyCop uses Bob's own extension points: four hooks and a small MCP server. Nothing is patched.

BOBEach tool call fires his PostToolUse hook
events.jsonl
LOCAL SERVER127.0.0.1:4747 turns steps into cards and serves the page
card
YOUAnswer in the browser
YOUR ANSWERWritten as a correction
inbox.jsonl
PRETOOLUSE HOOKand the check_in MCP tool pick it up
next step
BOBReads it and changes course

Every card comes from Bob's own words: what he declared, what his diff does and what he said at the end. With a watsonx.ai key, IBM Granite also writes cards for the hidden assumptions in each diff, the defaults and edge cases nobody asked for.

Deploy

Three commands and a reload.

TERMINAL
# once per machine
$ npm i -g lazycop

# once per Bob workspace
$ lazycop init ~/path/to/your-project

# then, in Bob
> /lazycop Add coupon expiry to coupon.js
  • Reload the Bob window. Cmd/Ctrl+Shift+P, then "Reload Window".
  • Check Settings → MCP. lazycop shows connected, and the mode list shows 👮 LazyCop.
  • Turn on MCP auto-approve. Otherwise Bob asks before every LazyCop call.

What leaves your machine. The server listens on 127.0.0.1 only. Without watsonx.ai credentials, nothing about your task goes out. With them, your task text, Bob's assumptions and his diffs go to watsonx.ai under your own account. lazycop uninstall removes only what init added.