diff --git a/internal/cmd/prime.go b/internal/cmd/prime.go index f6d64eac..3af45067 100644 --- a/internal/cmd/prime.go +++ b/internal/cmd/prime.go @@ -1171,8 +1171,17 @@ func getAgentFields(ctx RoleContext, state string) *beads.AgentFields { // getAgentBeadID returns the agent bead ID for the current role. // Uses canonical naming: prefix-rig-role-name +// The prefix is looked up from routes.jsonl to support rigs with custom prefixes. // Returns empty string for unknown roles. func getAgentBeadID(ctx RoleContext) string { + // Helper to get prefix for rig-level agents + getPrefix := func() string { + if ctx.TownRoot != "" && ctx.Rig != "" { + return beads.GetPrefixForRig(ctx.TownRoot, ctx.Rig) + } + return "gt" // Default prefix + } + switch ctx.Role { case RoleMayor: return beads.MayorBeadID() @@ -1180,22 +1189,22 @@ func getAgentBeadID(ctx RoleContext) string { return beads.DeaconBeadID() case RoleWitness: if ctx.Rig != "" { - return beads.WitnessBeadID(ctx.Rig) + return beads.WitnessBeadIDWithPrefix(getPrefix(), ctx.Rig) } return "" case RoleRefinery: if ctx.Rig != "" { - return beads.RefineryBeadID(ctx.Rig) + return beads.RefineryBeadIDWithPrefix(getPrefix(), ctx.Rig) } return "" case RolePolecat: if ctx.Rig != "" && ctx.Polecat != "" { - return beads.PolecatBeadID(ctx.Rig, ctx.Polecat) + return beads.PolecatBeadIDWithPrefix(getPrefix(), ctx.Rig, ctx.Polecat) } return "" case RoleCrew: if ctx.Rig != "" && ctx.Polecat != "" { - return beads.CrewBeadID(ctx.Rig, ctx.Polecat) + return beads.CrewBeadIDWithPrefix(getPrefix(), ctx.Rig, ctx.Polecat) } return "" default: diff --git a/internal/polecat/manager.go b/internal/polecat/manager.go index 48fb2c2d..bb296494 100644 --- a/internal/polecat/manager.go +++ b/internal/polecat/manager.go @@ -12,6 +12,7 @@ import ( "github.com/steveyegge/gastown/internal/config" "github.com/steveyegge/gastown/internal/git" "github.com/steveyegge/gastown/internal/rig" + "github.com/steveyegge/gastown/internal/workspace" ) // Common errors @@ -84,9 +85,17 @@ func (m *Manager) assigneeID(name string) string { } // agentBeadID returns the agent bead ID for a polecat. -// Format: "gt--polecat-" (e.g., "gt-gastown-polecat-Toast") +// Format: "--polecat-" (e.g., "gt-gastown-polecat-Toast", "bd-beads-polecat-obsidian") +// The prefix is looked up from routes.jsonl to support rigs with custom prefixes. func (m *Manager) agentBeadID(name string) string { - return beads.PolecatBeadID(m.rig.Name, name) + // Find town root to lookup prefix from routes.jsonl + townRoot, err := workspace.Find(m.rig.Path) + if err != nil || townRoot == "" { + // Fall back to default prefix + return beads.PolecatBeadID(m.rig.Name, name) + } + prefix := beads.GetPrefixForRig(townRoot, m.rig.Name) + return beads.PolecatBeadIDWithPrefix(prefix, m.rig.Name, name) } // getCleanupStatusFromBead reads the cleanup_status from the polecat's agent bead.