docs(m1): answer the Cowork probe - Step 1 Verify now exits 0

All four bullets answered by the operator in a live Cowork session. The step's
Verify goes from exit 1 to exit 0, which is the whole point of having written
it as a `test` rather than a count-and-eyeball: it was red for a reason and is
now green for a reason.

  - Sesjonsmodus: sky
  - Host-MCP: ja
  - python3: ja 3.11.15
  - CLAUDE_PLUGIN_ROOT: ja

Host-MCP is `ja` on both halves of the rule, not just the first. The connector
was listed AND `probe_ping` returned `probe-tools 0.0.1, python 3.14.0 @
/usr/local/bin/python3` -- a macOS path and the host interpreter, against the
sandbox's 3.11.15 [GCC 13.3.0]. The call crossed from the cloud session to this
Mac. That was the prediction stated before the call, so the test could have
falsified it.

Consequence recorded alongside the capability, because it is a cost: a
plugin-declared MCP tool in Cowork needs this machine awake, connected and
carrying the right Python. A cloud session elsewhere reaches nothing. The
degradation branch is therefore also the answer to "this Mac is asleep" -- a
routine state, not an exceptional one.

Run 2 of the two-run record was dropped rather than quietly skipped. It was
designed on the expectation that the off run would fail; it did not, and the
default configuration already gives a working host-side server. Confirming that
local mode also works has low value against its cost, so it is deferred with
the reason stated and named as the first thing to try if the cloud path breaks.

One negative result worth keeping: an individual tools/call does NOT reach
main.log. `grep -c probe_ping main.log` returned 0 both before and after a
successful call. The check script already refused to read that absence as an
answer; this records why that caution was correct.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-09-04 19:04:56 +02:00
commit 8f0c2fa360

View file

@ -27,17 +27,17 @@ Overwrite `ubesvart` with one of the allowed answers, and put the date of the
measurement in the Measured column. A `nei` is a result, not a failure — it
selects the degradation branch below.
- Sesjonsmodus: ubesvart
- Host-MCP: ubesvart
- python3: ubesvart
- CLAUDE_PLUGIN_ROOT: ubesvart
- Sesjonsmodus: sky
- Host-MCP: ja
- python3: ja 3.11.15
- CLAUDE_PLUGIN_ROOT: ja
| Bullet | What the operator does in Cowork | Allowed answer | Measured |
|---|---|---|---|
| `- Sesjonsmodus:` | Open a Cowork session and read whether it is a local VM or cloud | `lokal VM` or `sky` | |
| `- Host-MCP:` | Upload `jobbsok-probe.plugin` via Customize -> Plugins; does `probe-tools` appear as a connector, and does `probe_ping` return? | `ja` or `nei` | |
| `- python3:` | Run the `probe-versjon` skill; does it succeed in invoking `python3`, and which version does it report? | `ja` or `nei`, followed by the reported version | |
| `- CLAUDE_PLUGIN_ROOT:` | Run `probe-versjon`; does it print a resolved absolute path, or the literal variable name? | `ja` or `nei` | |
| `- Sesjonsmodus:` | Open a Cowork session and read whether it is a local VM or cloud | `lokal VM` or `sky` | 2026-09-04 -- read off the measurement, not the settings screen: the sandbox reports `/root/...` paths and `[GCC 13.3.0]` |
| `- Host-MCP:` | Upload `jobbsok-probe.plugin` via Customize -> Plugins; does `probe-tools` appear as a connector, and does `probe_ping` return? | `ja` or `nei` | 2026-09-04 -- both halves hold: connected per `main.log`, and `probe_ping` returned `probe-tools 0.0.1, python 3.14.0 @ /usr/local/bin/python3` |
| `- python3:` | Run the `probe-versjon` skill; does it succeed in invoking `python3`, and which version does it report? | `ja` or `nei`, followed by the reported version | 2026-09-04 -- `3.11.15 (main, Mar 3 2026) [GCC 13.3.0]`, the SANDBOX interpreter, not the host's |
| `- CLAUDE_PLUGIN_ROOT:` | Run `probe-versjon`; does it print a resolved absolute path, or the literal variable name? | `ja` or `nei` | 2026-09-04 -- `/root/.claude/plugins/synced/<session>_<account>/jobbsok-probe`, and the path exists |
### Two-run record: is the session-location setting the lever?
@ -53,8 +53,8 @@ cheap one to lose: it is the current default, and a fresh install returns to it.
| Run | `Only on this computer` | `probe-tools` listed? | `probe_ping` answers? | Manifest version | Date |
|---|---|---|---|---|---|
| 1 | off (current default) | | | | |
| 2 | on | | | | |
| 1 | off (current default) | yes | yes -- returned host Python 3.14.0 | 0.0.1 | 2026-09-04 |
| 2 | on | not run -- see below | | | |
How to read the pair:
@ -277,6 +277,22 @@ client's `protocolVersion` rather than asserting its own default. The client
asked for `2025-11-25`, which is newer than the server's fallback; a hardcoded
version would have made this handshake a different and worse story.
**The consequence, which is a cost and not only a capability.** Because the
server runs on the Mac and is bridged in, a plugin-declared MCP tool in Cowork
depends on this machine being awake, connected, and carrying the right Python
environment. A cloud session on a phone or another laptop reaches nothing. That
is the honest shape of operator decision 7: it buys real host access -- the
guard, the workspace, the filesystem -- at the price of tying the Cowork surface
to one machine. The degradation branch below is therefore not only the answer to
a `nei`; it is also the answer to "this Mac is asleep", which is a state that
will occur routinely rather than exceptionally.
Also worth recording, because it shaped this script's own check: an individual
`tools/call` does **not** appear in `main.log`. The connection lifecycle does.
`grep -c probe_ping main.log` returned 0 both before and after a successful
call, so the absence of that line proves nothing -- which is why the check
script says so instead of reading it as an answer.
### O2. The sandbox and the host are two different interpreters
| Where | Interpreter | Evidence |