The hook used to write a receiver's trouble to its error log only, so an agent with no account could not tell that from a machine with no daemon. didbot's daemon now answers a report with why its context was refused an account (https://tangled.org/permadeath.com/didbot/pulls/1171). The hook still logs that, and now also shows it to the model as one plain line: the daemon's own sentence, giving the operator's fix where there is one, with nothing to install. The daemon tells each refusal once, so the hook stays stateless. What the model sees for a subagent refused as its session:
before: (nothing; the refusal is in hook-errors.log only)
after: didbot: no account was created for this agent: the server refused: NotAllowedToCreate: no allowance in the operator's repository lets did:web:s-1.laptop.pds.example create an agent. An operator lets accounts beneath the host create agents with `didbot operate <HOST> <OPERATOR> --creates agent --creates-beneath agent`, or sets DIDBOT_SUBAGENT_OPERATOR=host.
The fixtures are pinned to that PR's commit, and they add answer-refused, which has the same shape as answer-trouble. The wire version is unchanged. Re-pin them once it merges. Other troubles, such as a version mismatch, now reach the model the same way. The version is 0.3.2 so it doesn't collide with #44's 0.3.1.
🤖 Generated with Claude Code