paperclipai/paperclip · error · Error

Profile '${ctx.profileName}' is persona=${ctx.profile.person

Error message

Profile '${ctx.profileName}' is persona=${ctx.profile.persona}; use an agent prompt command or a board profile.

What it means

`runBoardPrompt` resolves the active profile and requires its `persona` to be `board` (or unset). If the profile persona is `agent`, it throws before any API request, because a board prompt must run with board/operator credentials and targets an agent by reference. This is the mirror of the agent-prompt persona guard.

Source

Thrown at cli/src/commands/client/prompt.ts:147

    actor: "agent",
    agent: me,
    companyId: me.companyId,
    prompt: body,
    issueId: opts.issue,
    title: opts.title,
    wake: opts.wake !== false,
  });
  return result;
}

export async function runBoardPrompt(
  agentRef: string,
  prompt: string,
  opts: PromptOptions,
): Promise<PromptResult> {
  const ctx = resolveCommandContext(opts, { requireCompany: true });
  if (ctx.profile.persona && ctx.profile.persona !== "board") {
    throw new Error(`Profile '${ctx.profileName}' is persona=${ctx.profile.persona}; use an agent prompt command or a board profile.`);
  }
  const body = normalizePrompt(prompt);
  const query = new URLSearchParams({ companyId: ctx.companyId ?? "" });
  const agent = await ctx.api.get<Agent>(`${apiPath`/api/agents/${agentRef}`}?${query.toString()}`);
  if (!agent) throw new Error(`Agent not found: ${agentRef}`);

  return createOrCommentForAgent({
    api: ctx.api,
    actor: "board",
    agent,
    companyId: ctx.companyId ?? agent.companyId,
    prompt: body,
    issueId: opts.issue,
    title: opts.title,
    wake: opts.wake !== false,
  });
}

View on GitHub (pinned to 67001ec6eb)

Solutions

  1. Switch to a board profile: `paperclipai --profile <boardProfile> board prompt --agent <ref> ...`
  2. Reconfigure the profile persona to board via `paperclipai connect` (choose board)
  3. If you actually are the agent, use `paperclipai agent prompt ...` instead

Example fix

# before (current profile is an agent profile)
paperclipai board prompt --agent agent-1 "do work"
# after
paperclipai --profile board-op board prompt --agent agent-1 "do work"
Defensive patterns

Strategy: validation

Validate before calling

function profileIsBoard(options: { context?: string; profile?: string }): boolean {
  const { profile } = resolveProfile(readContext(options.context), options.profile);
  return !profile.persona || profile.persona === "board";
}
if (!profileIsBoard(opts)) {
  throw new Error("Switch to a board profile before running a board prompt.");
}

Type guard

function isBoardProfile(profile: { persona?: string }): profile is { persona: "board" } {
  return profile.persona === "board";
}

Prevention

When it happens

Trigger: Invoking `paperclipai board prompt --agent <agentRef> ...` while the active profile is an agent persona (connected via `paperclipai connect` choosing the agent flow). Also triggered by `--profile <agentProfileName>` on the board prompt command.

Common situations: An operator and an agent sharing the same machine/context file; the current profile was set to the agent identity and the operator ran a board-prompt without switching; CI using an agent key where board auth is required.

Related errors


AI-assisted analysis of paperclipai/paperclip@67001ec6eb (2026-08-12). Data as JSON: /api/errors/5652d541ddc8f8eb. Report an issue: GitHub.