claude-code: remove from or restore to only an agent account's own home
mesh/merge-gate pass: builds claude-code → ace, g14, novox, shanks; no bus step; every machine composes with the change as it did without (4 of 4 compose)
mesh/repo-check pass: THE CHANGE ALTERS ITS OWN CHECK (merge-check.sh, merge-check-typescript.sh): main's version judged it; the change's judges the pull r…
mesh/delivery delivered

Removing a rule from the operator's own home changes what their sessions
obey as surely as placing one: an agent could remove the rule that
constrains it (hq issue 340).
This commit is contained in:
jochen
2026-10-09 09:51:18 +02:00
parent 3677af6079
commit d984eb84d6
5 changed files with 66 additions and 7 deletions
@@ -78,6 +78,20 @@ func (p Paths) HomeIsTheAgentsOwn() bool {
return home == filepath.Clean(p.AgentHome) && (p.OperatorHome == "" || home != filepath.Clean(p.OperatorHome))
}
// HomeChangeRefused says why this node's home may not be changed through the tools, or "": removing or putting
// back an item of it changes what every session there obeys as surely as placing one — an agent could remove a
// rule that constrains it — so it is done only where the home belongs to an agent account of its own (novox/hq
// issue 340). The operator's own home is the operator's, changed by the person, not through a call.
func HomeChangeRefused(p Paths, what string) string {
if p.HomeIsTheAgentsOwn() {
return ""
}
return what + " on " + p.Node + " would change the operator's own ~/.claude, whose rules and skills every " +
"session the operator starts obeys, and the tool runner cannot tell the operator from an agent. It is done " +
"only where the agent runs as an account of its own and the home is that account's (novox/hq ADR 0266, " +
"issue 340); in the operator's own home it is the person's act, by hand. Nothing was changed"
}
// HomeScopeRefused says why the home scope is not written for a node, or "": only this node's own home, and only
// where it belongs to an agent account of its own (novox/hq issue 340). Another node's home cannot be judged
// from here; that node's own module judges it.