You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Helpthread's fixed vocabulary rule is reversed (maintainer decision, July 2026). The current rule — "Agents are human support staff, Assistants are AI actors" (CLAUDE.md) — is superseded by a four-kind actor model:
Actor kind
Meaning
Persistence / API value
Staff
A human acting for the operator — worker, reviewer, or supervisor
staff_members; 'staff'
Agent
A native or external AI / autonomous actor
agents; 'agent'
System
Deterministic, non-AI automation
proposed; does not exist yet
Participant
An external human in a conversation
replaces 'customer'
Actor is the umbrella concept — architecture, schema, and protocol. Not heavy UI copy.
The product surface becomes Helpthread Inbox (from "Agent Inbox"); the contract agent-inbox-v1 becomes inbox-v1.
Agent Exchange keeps its name, with its scope narrowed to agents only. Relay spans all actor kinds; the Exchange is the agent directory. What changes is Define Agent Exchange as a Relay-based control plane #155's definition of the registry, not the name.
Why now, and why it is not a charter change. The charter's actor-model invariant is that the kinds are never silently conflated — the words themselves are not the invariant, so changing them is ordinary vocabulary work plus an amendment. The motivating argument: a future in which AI agents do the primary work and humans supervise reads backwards under the current names.
Two hazards that make this more than a find-and-replace
1. The polarity swap.agents → staff_members and assistants → agents trade names within the same namespace. A half-applied migration silently mis-attributes authorship, which is the provenance invariant. Never rename in place. Migrate through fresh names in a single transaction, with a fixture proving every existing row keeps its true author across the swap.
2. Design-system coupling.MessageBand and Avatar (and their .d.ts files) under web/src/components/ds/ carry these words and are byte-verbatim copies from the design project. The rename goes upstream in the design project first and comes down via DesignSync — hand-editing them breaks the byte-comparison drift detector that makes the two sides verifiable.
Ground truth in the schema
Verified in src/db/migrate.ts; do not re-derive:
role text NOT NULL DEFAULT 'agent' CHECK (role IN ('admin','agent')) is a second, unrelated meaning of "agent" — a permission role, not an actor kind. Under the swap it would read as "this human is an AI." It must be renamed, and it is easy to miss.
author_kind IN ('customer','agent','assistant') — only three kinds exist today. There is no system kind, so adding one is new schema, not part of the rename.
'customer' as the external-human kind already contradicts the charter's non-goal rejecting "the word 'customer' as the only name for a person being served." Renaming it to participant resolves a pre-existing contradiction rather than creating work.
Scope
Roughly 5,250 "agent" and 1,125 "assistant" occurrences across 149 files, mostly prose. Estimated 2–3 days, plus a design pass and a charter amendment.
The count grows with every merge — it was ~5,129 / ~1,173 across 131 files when the decision was made, and 18 more files have since acquired the terms. Work merged after this issue is opened will need the same treatment.
Ride-along fix
specs/modules/marketplace-v1.md (around lines 160 and 420) still refers to Helpthread/marketplace and Helpthread/module-draft-assistant. Those repositories now live in the ResonantIQ organization, so the paths are stale. That file carries 48 agent/assistant occurrences this rename rewrites anyway, so the correction belongs here rather than in its own PR.
Definition of done
Schema migrated through fresh names in one transaction, with an author-provenance fixture proving no row changes authorship
The role column's 'agent' value renamed — it is a permission role, not an actor kind
'customer' → 'participant' in author_kind
agent-inbox-v1 → inbox-v1, spec file renamed and all cross-references updated
Design project updated first; web/src/components/ds/ re-pulled via DesignSync, not hand-edited
The change
Helpthread's fixed vocabulary rule is reversed (maintainer decision, July 2026). The current rule — "Agents are human support staff, Assistants are AI actors" (
CLAUDE.md) — is superseded by a four-kind actor model:staff_members;'staff'agents;'agent''customer'agent-inbox-v1becomesinbox-v1.Why now, and why it is not a charter change. The charter's actor-model invariant is that the kinds are never silently conflated — the words themselves are not the invariant, so changing them is ordinary vocabulary work plus an amendment. The motivating argument: a future in which AI agents do the primary work and humans supervise reads backwards under the current names.
Two hazards that make this more than a find-and-replace
1. The polarity swap.
agents→staff_membersandassistants→agentstrade names within the same namespace. A half-applied migration silently mis-attributes authorship, which is the provenance invariant. Never rename in place. Migrate through fresh names in a single transaction, with a fixture proving every existing row keeps its true author across the swap.2. Design-system coupling.
MessageBandandAvatar(and their.d.tsfiles) underweb/src/components/ds/carry these words and are byte-verbatim copies from the design project. The rename goes upstream in the design project first and comes down via DesignSync — hand-editing them breaks the byte-comparison drift detector that makes the two sides verifiable.Ground truth in the schema
Verified in
src/db/migrate.ts; do not re-derive:role text NOT NULL DEFAULT 'agent' CHECK (role IN ('admin','agent'))is a second, unrelated meaning of "agent" — a permission role, not an actor kind. Under the swap it would read as "this human is an AI." It must be renamed, and it is easy to miss.author_kind IN ('customer','agent','assistant')— only three kinds exist today. There is nosystemkind, so adding one is new schema, not part of the rename.'customer'as the external-human kind already contradicts the charter's non-goal rejecting "the word 'customer' as the only name for a person being served." Renaming it toparticipantresolves a pre-existing contradiction rather than creating work.Scope
Roughly 5,250 "agent" and 1,125 "assistant" occurrences across 149 files, mostly prose. Estimated 2–3 days, plus a design pass and a charter amendment.
The count grows with every merge — it was ~5,129 / ~1,173 across 131 files when the decision was made, and 18 more files have since acquired the terms. Work merged after this issue is opened will need the same treatment.
Ride-along fix
specs/modules/marketplace-v1.md(around lines 160 and 420) still refers toHelpthread/marketplaceandHelpthread/module-draft-assistant. Those repositories now live in the ResonantIQ organization, so the paths are stale. That file carries 48 agent/assistant occurrences this rename rewrites anyway, so the correction belongs here rather than in its own PR.Definition of done
rolecolumn's'agent'value renamed — it is a permission role, not an actor kind'customer'→'participant'inauthor_kindagent-inbox-v1→inbox-v1, spec file renamed and all cross-references updatedweb/src/components/ds/re-pulled via DesignSync, not hand-editedCLAUDE.mdvocabulary rule replacedspecs/modules/marketplace-v1.mdrepository paths correctedsystemactor kind is out of scope — it is new schema, tracked separately if wanted