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
- Switch to a board profile: `paperclipai --profile <boardProfile> board prompt --agent <ref> ...`
- Reconfigure the profile persona to board via `paperclipai connect` (choose board)
- 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
- Verify the active profile persona before board commands
- Use `--profile` to be explicit
- Separate board and agent contexts to prevent accidental cross-use
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
- Profile '${ctx.profileName}' is persona=${ctx.profile.person
- Environment variable ${envName} is empty or not set.
- Challenge secret is required. Pass --token or --token-env.
- Agent key belongs to ${agent.name} (${agent.id}), not '${ref
- Environment variable ${opts.apiKeyEnv.trim()} is not set
AI-assisted analysis of paperclipai/paperclip@67001ec6eb (2026-08-12).
Data as JSON: /api/errors/5652d541ddc8f8eb.
Report an issue: GitHub.