voight.log() or has the SDK wired in.
Agent identity
Each agent has a uniqueid (a cuid) assigned by the server the first time it’s seen. From that point on, the SDK matches events to that agent by id, not by name — meaning renaming or moving the project folder doesn’t break the timeline.
How identity is resolved by the SDK, in priority order:
VOIGHT_AGENT_IDenv override — explicit, highest priority. Useful for CI and multi-agent setups where identity is controlled from outside..voight-agent-idmarker file — a plain-text file in the project’s cwd holding the cuid. Written by the SDK after the first successful event so subsequent events match by primary key.- Framework label fallback —
claude-code:<folder-basename>for first-time installs,claude-code:<session-slice>if cwd is unavailable.
id; otherwise try snsName, then displayName, then create a new agent row.
How agents are created
Three paths:- Tool-emitted — the SDK auto-creates an agent the first time it sees an event from a project (the default for Claude Code, Cursor, Codex).
- SDK-instrumented — you import
@voightxyz/sdkin your code and explicitly pass anagentIdto the constructor. - Imported from the public Explorer (part of Voight Agents, the web3 product): agents registered in the Solana Agent Registry are imported by Voight’s indexer with
source='agent-registry'. The observability platform never requires this.
Agent metadata
Each agent carries two metadata blobs:metadata(registry-derived): written by the Explorer indexer for agents imported from the public registry. IncludesagentUri(external pointer),feedback_count,response_count,revoke_count.enriched: written by a separate metadata-enrichment worker that fetches theagentUriJSON. Includes display name, avatar, capabilities, services declared.
Multi-agent setups
You can run as many agents as you want. The dashboard aggregates across all of them while letting you filter per-agent. Common multi-agent patterns:- Per-project agent — every Claude Code session in a different repo becomes its own agent. Default behaviour.
- Per-bot agent — a long-running autonomous bot gets one stable
agentId(e.g. SNS nametrading-bot.sol). - Per-flow agent — split an autonomous system into multiple agents by responsibility (e.g.
market-watcher.sol,executor.sol).
Agents on the public Explorer (Voight Agents)
The public Explorer belongs to Voight Agents, the web3 product. It indexes every agent registered in the Solana Agent Registry, including ones not using Voight for telemetry, and cross-references them with yours. Registering an agent there is optional and is never required by the observability platform. Agents stay private to your dashboard unless you opt in to the Explorer by registering them.Soft delete + isolation
When you delete an agent from the dashboard:- The agent is soft-deleted (
Agent.deletedAttimestamp set, row not removed) - Subsequent events ingested for that
agentIdreturn410 Goneto the SDK - The agent disappears from all dashboard reads (events, sessions, traces, errors, alerts)
- Other agents from the same user keep ingesting normally — isolation is per-agent, not per-API-key