Agent Identity
How agents are named, addressed, and resolved across machines and harnesses.
This doc explains how Scout turns a human-friendly handle like @hudson into one exact agent identity. Read it after quickstart.md↗ when you want to understand what an agent name represents, why short names sometimes work, and when Scout needs more qualifiers.
Every agent in Scout has a name. When there is only one agent on one machine, the name is simple — @arc or @hudson. But agents multiply. The same project might run on two machines. The same workspace might have a main branch and a feature branch, each with its own agent. A project might use Claude for one task and Codex for another.
The identity grammar exists to keep every agent unambiguously addressable while still letting humans type the shortest useful name.
Three Layers
Scout separates identity into three layers, each serving a different audience:
-
Canonical identity is exact, stable, and system-owned. It includes every dimension needed to distinguish one agent from all others. Humans rarely type it, but the broker always stores it.
-
Minimal unique identity is the shortest address that still resolves to exactly one agent. Scout computes it automatically from the current set of online agents. When there is only one
hudson,@hudsonis enough. When two exist on different machines,@hudson.node:minidisambiguates. -
Alias is a human-owned shortcut.
@huddymaps to one specific identity. If the mapping becomes ambiguous, the alias is invalid until repaired.
The Five Dimensions
An agent identity combines up to five dimensions:
| Dimension | What it captures | Example |
|---|---|---|
definitionId | The base project or workspace | arc, hudson |
workspaceQualifier | A non-default worktree or branch | super-refactor, main |
profile | A capability or persona preset | dev, dev-browser |
harness | The execution backend | claude, codex |
node | The machine or host | mini, macbook |
The canonical form strings them together with dots:
@<definitionId>[.<workspaceQualifier>][.profile:<profile>][.harness:<harness>][.node:<node>]In practice, most of these dimensions are omitted. You only include what is needed to resolve unambiguously.
Examples
From shortest to most qualified:
| Address | What it resolves |
|---|---|
@arc | The only arc agent currently online |
@arc.main | The arc agent on the main branch |
@arc.super-refactor | The arc agent on a feature worktree |
@arc.main.harness:claude | Specifically the Claude-backed arc on main |
@arc.super-refactor.harness:claude.node:mini | Fully qualified: project, branch, harness, machine |
Parsing and Normalization
@is required in user-facing text. Internal systems can omit it.- One positional qualifier (without a type prefix) is allowed after the definition ID — it is always treated as the workspace qualifier.
- Typed qualifiers (
profile:,harness:,node:) may appear in any order during input. Scout normalizes them to canonical order on storage. - Segments are lowercased and kebab-cased:
Super Refactorbecomessuper-refactor,Mini.localbecomesmini-local. Dots are reserved as separators.
These aliases are accepted during parsing and map to canonical dimensions:
| Alias | Maps to |
|---|---|
branch:, worktree: | workspaceQualifier |
persona: | profile |
runtime: | harness |
host: | node |
Resolution
When you type @hudson, Scout resolves it against all known agents:
- Check for an exact alias match first.
- Match the parsed identity against registered candidates.
- If exactly one candidate matches, resolve to it.
- If zero or more than one match, return nothing — the name is either unknown or ambiguous.
This keeps short names fast and ergonomic while requiring precision only when the situation demands it.
Minimal Unique Identity
Given a specific agent and its peers, Scout prefers the shortest address that uniquely identifies it. Dimensions are dropped in this order until removing the next one would create ambiguity:
workspaceQualifierprofileharnessnode
If a configured alias is shorter than the minimal canonical form and resolves uniquely, Scout prefers it.
Example:
- Canonical:
@hudson.hudson-main-8012ac.node:arachs-mac-mini-local - Minimal unique:
@hudson(if only one hudson is online) - Alias:
@huddy