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

feat(collection): let the feed sit in front of the real receiver #63

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

One socket takes one listener, so the watcher and the daemon could not run at the same time: whichever bound first got every record and the other got nothing. --forward makes the watcher sit in front of the daemon instead of instead of it — it narrates each record, passes it on, and answers the hook with whatever came back, untouched.

A relay rather than a tee. The hook is waiting for an answer and only the daemon can produce one, so a copy going two directions would leave the hook holding a reply that cannot name anybody. Trouble comes back the same way and lands in the feed rather than being swallowed: a daemon that is down or disagrees about the wire is exactly what somebody watching this needs to be told. The pinned count gains named and refused alongside the call counts.

scripts/dev-feed.sh wires it up, and says what to start when nothing is behind it yet. Also removes three __pycache__ files that should never have been committed, and adds the .gitignore that keeps them out.

22:19:33  demo-1  spawned          a-explor Explore  [could not reach the server: …/bot.did.provisionAgent]
22:23:33  demo-2  session started    [named did:web:demo-2.agents.localhost%3A3000]
22:23:34  demo-2  spawned          a-explor Explore  [named did:web:a-explore.agents.localhost%3A3000]
22:23:34  demo-2    a-explor                     Bash
22:23:34  demo-2  spawned          a-plan Plan  [named did:web:a-plan.agents.localhost%3A3000]
22:23:35  demo-2  finished a turn  a-plan

The unmarked Bash line is the point: that context already had a name, so it was not told again.

🤖 Generated with Claude Code

This pull request has no versions submitted yet.