Wires Claude Code to a didbot personal data server: hooks, a plugin, and the harness contract they rest on.

feat(plugin): say who is asking, and stamp the client that confirms #65

Merged permadeath.com
targeting main
Merged opened by and assigned to permadeath.com
targeting main

Two changes, both of which exist because a second plugin now runs on the same events.

The hook names itself. The receiver counts askers separately — an identity is told to a context once per asker — so a plugin carrying a product's own instructions gets its own answer instead of the silence that means "already told". Without this, whichever plugin asked first would learn the account and the other would learn nothing.

The nonce is back, because the thing that reads it now exists. A command running this project's client is stamped, and didbot confirm reads that stamp to learn which context is asking for an authorization to be confirmed. It is random rather than derived from the call's identifier, since a transcript on this machine holds other contexts' identifiers and anything derived from one is forgeable by a model that can read it.

Both hooks, on one SubagentStart, each answered:

didbot        Your agent identity on this machine is did:web:harper.agents.localhost%3A3301.
vibescrobble  You can record what you are working on. Your account is did:web:harper...

🤖 Generated with Claude Code

This pull request has no versions submitted yet.