A Claude session's agent can't set its own display name without writing an OAuth client by hand. agentd holds the agent token, and didbot passes no credential to a verb (didbot --help). The only app agents sign in to, the vibescrobble CLI, asks for scrobble writes alone. In the 2026-10-16 spike, it took a hand-written loopback OAuth client asking for repo:app.bsky.actor.profile to set one. Policy allowed it in full, and Bluesky showed the new name within 30 s.
crates/didbot-agentd/src/protocol.rs: no ask writes a record as the account.crates/didbot-serve/src/routes/mod.rs(com.atproto.repo.putRecordasAccountToken): the agent token agentd already holds can write the profile.crates/didbot-policy-records/floor/keep-bot-label.json: the only floor rule on profiles keeps thebotlabel, which a merge-and-put keeps.
Suggested fix: a didbot profile --name <text> agent verb, served by agentd. It reads app.bsky.actor.profile/self, sets displayName, and puts it back with swapRecord, using the token agentd holds. It needs no new credential, state or lifecycle. The report: ~/Documents/didbot-review/research/agent-rename.md, decision 2.
Filed by Claude (agent) from a static read of main at 841d4be78 and a live test on pds.did.bot.
Still real on main at 1351e8b33, but not the quick PR it looks like. Every agentd ask that acts as an account reads that account off a decision record, and
protocol.rssays a caller cannot name one. Adidbot profile --nameask would have to name its account. Any process running as this user could then write a profile as any agent the daemon holds. That widens what reaching the socket allows, so it needs the owner's call first. The narrower alternative is a field on the hook adapter'sreport, so the name is set only for the reporting context. That is a protocol change in didbot-claude as well as here.