At 46ff6ee there is no verb anywhere in the command tree that renames an agent.
Enumerated from st2 completions bash (generated from the live command tree, so it can't drift from the real flags):
- top level:
ls up message context resource service hooks ding status compile-agent down env pretrust eval pty shell validate doctor agents completions
message: send reply ls read archive thread
context: read write append
resource: add ls read remove
grep -iE '\b(rename|move|mv|relabel|alias)\b' over that tree returns nothing. In the source, every rename hit is either fs::rename (the atomic tmp+rename write pattern) or #[serde(rename = …)] — none is a user-facing verb.
This costs more than a convenience verb, because the identity is the path:
// src/main.rs:1075
.unwrap_or_else(|| catalog_root.join(&id));
and from src/message.rs:
The recipient is implied by the path
So the identity string names the directory holding everything durable about that agent:
<agent_dir>/resources/inbox/ — "Send = write the file" (src/message.rs)
<agent_dir>/resources/archive/ — "An archive copy is also a durable receipt" (src/message.rs)
<agent_dir>/resources/context/ — now.md plus an append-only decisions/ log; "an agent's lossless-restart memory of 'what it was mid-doing'" (src/context.rs)
<agent_dir>/resources/links/ — "high-value output (a PR, a doc, a dashboard) as a durable, listable record" (src/resource.rs)
If a name turns out wrong — misnamed at declaration, or the seat's purpose changed — the only available path is to declare a new identity and retire the old one. agents --json already carries retired, so the model sanctions retire-and-recreate. But the new seat starts empty: the inbox history, the archive receipts, the decisions log, and the resource links all stay behind under the dead name. Those are precisely the artifacts that make a long-lived identity worth keeping.
Adopter impact: identity naming becomes a one-way door. Every name has to be right the first time and forever, or you accept losing that agent's accumulated history — a heavy thing to hang on the moment of declaration, which is when you know least about what the seat will turn into.
Two shapes that would close it, offered rather than prescribed:
- A rename that moves the agent directory and rewrites the identity wherever it is recorded. Easy to reason about, but it has to handle in-flight state: a live pty, a running ding sidecar, and
from fields in already-delivered messages that still name the old identity.
- An alias or successor edge, so a new name resolves to the same durable state without moving anything. Cheaper and inherently history-preserving, at the cost of a resolution step and a call on which name is canonical in the roster.
We may be duplicating work you already have unpushed — happy for this to be closed if so.
At
46ff6eethere is no verb anywhere in the command tree that renames an agent.Enumerated from
st2 completions bash(generated from the live command tree, so it can't drift from the real flags):ls up message context resource service hooks ding status compile-agent down env pretrust eval pty shell validate doctor agents completionsmessage:send reply ls read archive threadcontext:read write appendresource:add ls read removegrep -iE '\b(rename|move|mv|relabel|alias)\b'over that tree returns nothing. In the source, everyrenamehit is eitherfs::rename(the atomic tmp+rename write pattern) or#[serde(rename = …)]— none is a user-facing verb.This costs more than a convenience verb, because the identity is the path:
and from
src/message.rs:So the identity string names the directory holding everything durable about that agent:
<agent_dir>/resources/inbox/— "Send = write the file" (src/message.rs)<agent_dir>/resources/archive/— "An archive copy is also a durable receipt" (src/message.rs)<agent_dir>/resources/context/—now.mdplus an append-onlydecisions/log; "an agent's lossless-restart memory of 'what it was mid-doing'" (src/context.rs)<agent_dir>/resources/links/— "high-value output (a PR, a doc, a dashboard) as a durable, listable record" (src/resource.rs)If a name turns out wrong — misnamed at declaration, or the seat's purpose changed — the only available path is to declare a new identity and retire the old one.
agents --jsonalready carriesretired, so the model sanctions retire-and-recreate. But the new seat starts empty: the inbox history, the archive receipts, the decisions log, and the resource links all stay behind under the dead name. Those are precisely the artifacts that make a long-lived identity worth keeping.Adopter impact: identity naming becomes a one-way door. Every name has to be right the first time and forever, or you accept losing that agent's accumulated history — a heavy thing to hang on the moment of declaration, which is when you know least about what the seat will turn into.
Two shapes that would close it, offered rather than prescribed:
fromfields in already-delivered messages that still name the old identity.We may be duplicating work you already have unpushed — happy for this to be closed if so.