Appearance
Watching BoB Work
One run, four layers. In BoB in One Day you watched a run with
bob warp statusandbob warp viz. Those show the run. This tutorial keeps one run going and climbs from it to the project around it, the machine under it and the fleet it belongs to, one view at a time. Every command below comes from Watching BoB Work, which also explains what each view reads.
What you will do
| Stop | Layer | Question it answers |
|---|---|---|
| 1 | — | Start a run to watch |
| 2 | The run | What phase is it in, and how did it get there? |
| 3 | The project | Is this project set up to be worked on? |
| 4 | The machine | Does this machine run the BoB it thinks it does? |
| 5 | The fleet | Is every machine alive and reporting? |
| 6 | When something is wrong | Is a hook failing, is GitHub down, what did it cost? |
Then a table that maps each question you will ask to the one command that answers it.
Allow about an hour. The run works the whole time; you only look.
Before you start
- Finish BoB in One Day first. This tutorial reuses its
hello-bobproject, and needs nothing from the later tutorials. - One approved requirement in
hello-bob. Open Claude Code there, file a small one with/requirement(for example "The greeting names the day of the week"), say yes when it asks whether to approve it, and/exit. - A browser on this machine for
bob warp vizandbob viz. - Nothing to fix. Every view in this tutorial only reads. If one reports a problem, note its
next:orFix:line and carry on; the tutorial does not need you to fix it.
Stop 1. Start a run to watch
From the hello-bob directory, in a plain shell:
bash
bob warp start --level 3 --session hello-bob-watchWhat you should see.
- The preflight verdict (
PASS), then the session namehello-bob-watch, itstmux attachline and a viz URL. - The shell prompt comes back at once. The run keeps working in tmux.
What just happened. The run lives in the tmux session, so it keeps going while you run every other command in this tutorial from the same shell.
Checkpoint.
tmux lslistshello-bob-watch.
Stop 2. The run
bash
bob warp status
bob warp log
bob warp vizRun the first two lines, then the third. Leave the browser tab open.
What you should see.
bob warp statusprintsWARP DRIVE ACTIVE, thenPhase:(for examplecoding),Issue:with your requirement's number,Chunk:andPreflight: PASS.bob warp logprints one numbered row per transition: the phase, the event that caused it, and the time. The last row's phase is the onebob warp statusshows.bob warp vizopens a page with the run's phases as a graph and the current one highlighted.
What just happened. All three read the run's one state file, .claude/.warp-drive-state.json. The run writes it at every phase change, and every view reads the same copy, so they cannot disagree.
Checkpoint. The phase in
bob warp status, the last row ofbob warp logand the highlighted node in the viz are the same phase. If the run moved on between commands, runbob warp statusagain: all three still agree.
Stop 3. The project
bash
bob status
bob status --scope project
bob dash status --projects-only
bob dash serve --listWhat you should see.
bob statusprints four blocks: ahostline, aproject hello-bobline with its lastbob readyverdict and how long ago it was graded, afleetline, thenrunning here:withwarp-drive run hello-bob: <phase> on #<issue>and the dashboard's URL. It ends withnext: bob warp status, because a run is going here.bob status --scope projectprints a table of sections (project,readiness,rituals,backups), then one line perbob readystep:ok,no-oporwould, each with what it checked.bob dash status --projects-onlylists the projects on this machine.hello-bobshows its linked commands, hooks and agents, and aready:line.bob dash serve --listlistshello-bobas running, on the port its viz URL uses.
What just happened. The front door read cached verdicts only, so it was fast and made no network call. The project scope graded the project live, as a dry run: a would line is something bob ready would do, not a failure. The dashboard server in the list is the one bob warp viz started; one server per project serves its viz and its dashboard.
Checkpoint. The
running here:line inbob statusshows the same phase asbob warp status.
Stop 4. The machine
bash
bob status --scope host
bob doctorWhat you should see.
bob status --scope hostprints one section,host, with its verdict (ok), then the probe's lines.bob doctorprints the same probe:PASSlines forsurfaces,symlinks,project links,toolchainandsettings_hooks, thenINFOlines, among themversion(the release and the commit this machine was deployed from) andsnapshot timer.
What just happened. Every bob command you ran today executed the copy of BoB in ~/.claude. The probe checked that copy against the commit it was deployed from. INFO lines are reported but never graded: behind source says the source checkout has moved on since the deploy, which is normal and never drift. The run in tmux kept working while you looked; a probe changes nothing.
Checkpoint.
bob doctorexits 0 with every checkPASS. If one fails, itsFix:line names the command; note it and carry on.
Stop 5. The fleet
bash
bob status --scope fleet --no-live
bob viz
node ~/.claude/scripts/fleet/snapshot-timer.js statusWhat you should see.
bob status --scope fleet --no-liveprintsFleet audit, then one row per machine:MACHINE,ROLE,STATUS,AGEandPROJECTS. Under the table, a summary line counts machines that never published, that are stale and that are unreachable, with afix:line when any are.bob vizopens a page with one tile per project on every machine. Thehello-bobtile on this machine shows the run.- The last command says whether the snapshot timer is installed on this machine and how often it fires.
What just happened. Each machine publishes a snapshot of itself, on a timer. The fleet view reads those snapshots, so a machine is only as current as its last one. cached means under a day old; cached(stale) means older, so the machine is off or its timer stopped; never means it has never published. Run the first command again without --no-live: this machine's row turns live, because it is measured now instead of read from the cache.
Checkpoint. Without
--no-live, this machine's row islive. Inbob viz, thehello-bobtile shows the same phase asbob warp status.
Stop 6. When something is wrong
Every layer can report OK while a run still struggles. Three views say why. First, the steps a session had to do by hand:
bash
bob dash status --projects-only
node ~/.claude/scripts/warp-drive/harness-defect-summary.js state .What you should see. For a clean run, no ⚠ harness-defects: line under hello-bob in the dashboard, and harness-defects: none from the summary script. A run that compensated for a hook prints a line such as harness-defects: 1 open (3 recurrences).
What just happened. When a hook that should advance the run does not fire and the session does the step itself, the run records it with a fingerprint. The same fingerprint on several runs, or on several machines in the fleet view's Harness defects table, is a BoB bug worth reporting.
Next, GitHub:
bash
bob forge health
echo $?
bob forge queue statusWhat you should see.
bob forge healthprintsforge: operationalwith its reason, thenquota:lines for each GitHub API with what is left and when it resets, andspent by:with the calls each project made.echo $?prints0.bob forge queue statusprints the queue's path and(empty — nothing awaiting replay).
What just happened. The verdict came from the outcomes of the real gh calls this machine made, not from a guess. The exit code carries it: 0 operational, 3 degraded, 4 unreachable, 5 unknown. When GitHub is down, a run keeps working and queues the writes it cannot make. bob forge queue status is where you would see them waiting.
Last, cost. Wait until the run in tmux has finished (bob warp status reports no active run), then run one of these: the first inside Claude Code in hello-bob if the token-report skill is provisioned there, the second from the shell:
text
/token-reportbash
node ~/.claude/scripts/warp-drive/token-report.js --last 1What you should see. A Token Usage Report with three tables: By Project, Last 1 Sessions and Totals. The last session is your hello-bob run, with its tokens and estimated cost.
What just happened. The run recorded its tokens at each chunk and wrote its total when it ended. While a run is live, the Segment: line in bob warp status shows the tokens used so far.
Checkpoint.
bob forge healthexits with the code its verdict names (0foroperational), and the token report lists yourhello-bobrun as the last session.
Which view answers which question
When you want to know something, open the one view that answers it:
| Question | Command |
|---|---|
| What is the run doing right now? | bob warp status |
| How did the run get here? | bob warp log |
| Is the loop stuck? | bob warp status --watch (the phase and chunk stop moving) |
| Is everything OK, and what do I run if not? | bob status |
| Is this project ready to be worked on? | bob status --scope project |
| Is this machine drifted from its deploy? | bob doctor |
| Is the farm alive? | bob status --scope fleet (its row is cached, not cached(stale) or never) |
| What is every project doing, everywhere? | bob viz |
| Is a hook failing silently? | bob dash status --projects-only (a ⚠ harness-defects: line) |
| Is GitHub answering? | bob forge health (the exit code) |
| Are writes waiting for GitHub? | bob forge queue status |
| What did this cost? | /token-report |
Where you are now
You watched one run from four layers without changing anything: the run's own state, the project around it, the machine under it and the fleet. You also know where to look when a hook is failing, when GitHub is down and what a run cost. Each layer has one view you open first: bob warp status, bob status, bob doctor and bob status --scope fleet. When the run finishes, bob warp status reports no active run, and the bob status front door stops listing it under running here:.
Where to go next
- Watching BoB Work: what each view reads, and why none of them changes anything.
bob status: every scope, section and exit code.- bob viz: what the fleet page draws.
- Fleet Snapshot Timer: installing the timer on a machine that shows
never.
Next tutorial: Coming Back to a Project — The first hour back on a project after time away, as a fixed routine: machine, catch-up, your todos, the plan, the records, memory, rituals and the farm — then one ranked choice.