multica-ai/multica · error
subscriber %q resolved to %s; autopilot subscribers must be
Error message
subscriber %q resolved to %s; autopilot subscribers must be members
What it means
resolveAutopilotSubscriberInputs restricts autopilot subscribers to real members. Even though resolveAssignee was called with member-only kinds, this guard re-checks the returned userType and rejects anything that resolved to a non-member type (e.g. an agent or team identity).
Source
Thrown at server/cmd/multica/cmd_autopilot.go:754
}
fmt.Printf("Trigger %s deleted.\n", triggerRef.ID)
return nil
}
func resolveAutopilotSubscriberInputs(ctx context.Context, client *cli.APIClient, refs []string) ([]map[string]string, error) {
inputs := make([]map[string]string, 0, len(refs))
seen := map[string]struct{}{}
memberOnly := assigneeKinds{member: true}
for _, ref := range refs {
if strings.TrimSpace(ref) == "" {
return nil, fmt.Errorf("--subscriber cannot be empty")
}
userType, userID, err := resolveAssignee(ctx, client, ref, memberOnly)
if err != nil {
return nil, fmt.Errorf("resolve subscriber %q: %w", ref, err)
}
if userType != "member" {
return nil, fmt.Errorf("subscriber %q resolved to %s; autopilot subscribers must be members", ref, userType)
}
if _, ok := seen[userID]; ok {
continue
}
seen[userID] = struct{}{}
inputs = append(inputs, map[string]string{
"user_type": "member",
"user_id": userID,
})
}
return inputs, nil
}
// ---------------------------------------------------------------------------
// Helpers
// ---------------------------------------------------------------------------
// uuidRegexp matches a canonical UUID (8-4-4-4-12 hex).View on GitHub (pinned to 2c0912b6ec)
Solutions
- Replace the offending reference with a workspace member's email or member ID.
- List members to find the correct reference: `multica member list` (or the workspace members API).
- If you intended an agent on the trigger, use the trigger's agent field (--agent), not --subscriber.
Example fix
# before (agent name used as subscriber) multica autopilot trigger create --name t1 --agent triage-bot --subscriber triage-bot # after multica autopilot trigger create --name t1 --agent triage-bot --subscriber "owner@example.com"
Defensive patterns
Strategy: validation
Validate before calling
# only pass refs that appear in the member list (agents/teams excluded)
multica member list --output json | jq -e --arg s "$SUB" '.[] | select(.user_type == "member") | select(.email == $s or .id == $s)' >/dev/null \
|| { echo "$SUB is not a member" >&2; exit 2; } Prevention
- Keep a single source of member emails in automation config; never reuse agent names as subscriber refs.
- When a name is ambiguous between an agent and a member, prefer the member's email or UUID.
When it happens
Trigger: Passing a reference that resolves to an agent or team user_type, e.g. `--subscriber <agent-name>` when an agent with that name exists in the workspace, or a ref whose lookup path returns a team identity.
Common situations: Confusing agent names with member names (an agent named 'reviewer' and a member named 'reviewer'); migrating subscribers from a system where teams could subscribe; assuming any assignee-shaped reference is valid.
Related errors
- --subscriber cannot be empty
- invalid direction %q (want \"up\" or \"down\")
- --name is required
- --runtime-id is required
- --runtime-config must be valid JSON: %w
AI-assisted analysis of multica-ai/multica@2c0912b6ec (2026-08-15).
Data as JSON: /api/errors/5471b2dec5f3c049.
Report an issue: GitHub.