multica-ai/multica · error
--subscriber cannot be empty
Error message
--subscriber cannot be empty
What it means
Thrown by resolveAutopilotSubscriberInputs when a --subscriber flag value is empty or only whitespace. The autopilot trigger-create command validates each subscriber reference up front before calling resolveAssignee, so an empty string never reaches the API. This is pure client-side argument validation in the multica CLI.
Source
Thrown at server/cmd/multica/cmd_autopilot.go:747
if err != nil {
return fmt.Errorf("resolve trigger: %w", err)
}
path := "/api/autopilots/" + autopilotRef.ID + "/triggers/" + triggerRef.ID
if err := client.DeleteJSON(ctx, path); err != nil {
return fmt.Errorf("delete trigger: %w", err)
}
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, nilView on GitHub (pinned to 2c0912b6ec)
Solutions
- Remove the empty --subscriber argument or fix the shell variable that expanded to empty (check with `echo "[$SUB]"`).
- If scripting, guard each ref: skip or fail with context before invoking the CLI.
- Re-run with only non-empty subscriber references.
Example fix
# before
multica autopilot trigger create --name t1 --subscriber "$SUB"
# after
multica autopilot trigger create --name t1 --subscriber "${SUB:?SUB must be set}" Defensive patterns
Strategy: validation
Validate before calling
# shell: fail fast on empty subscriber refs before calling the CLI
for sub in "${SUBS[@]}"; do
[ -n "$(printf '%s' "$sub" | tr -d '[:space:]')" ] || { echo "empty subscriber ref" >&2; exit 2; }
done
multica autopilot trigger create --name t1 "${SUBS[@]/#/--subscriber }" Prevention
- Quote every --subscriber value and expand unset variables with ${VAR:?msg} so an empty string aborts before the CLI runs.
- In scripts, filter refs through a non-empty check in a preflight loop.
When it happens
Trigger: Running `multica autopilot trigger create --subscriber ""` or passing a subscriber list where one element is blank (e.g. repeated flags like `--subscriber alice --subscriber ""`, or shell expansion producing an empty variable like $EMPTY_USER).
Common situations: Shell scripts passing unset environment variables as subscriber refs; copy-pasting command templates with placeholder values; trailing commas in a loop that feeds empty strings.
Related errors
- subscriber %q resolved to %s; autopilot subscribers must be
- 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/5be89b04e0d444f6.
Report an issue: GitHub.