paperclipai/paperclip · error

Agent run id required

Error message

Agent run id required

What it means

400 from requireAgentRunId: the request demands an agent run context but the actor provided no run id, so the run-scoped operation cannot proceed.

Solutions

  1. Include the required field(s) in the request path, query, or body as named by the error message, then retry.
  2. Check the API contract in packages/shared validators for the exact required shape of this endpoint.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at server/src/routes/issues.ts:4000 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of paperclipai/paperclip@3f1d897a7c (2026-08-18). Data as JSON: /api/errors/4cc894000a684d2a. Report an issue: GitHub.

Appendix: source

Thrown at server/src/routes/issues.ts:5097

        );
      }
    }
    return {
      actorLabel: actorAgentId ? (nameById.get(actorAgentId) ?? null) : null,
      assigneeLabel: issue.assigneeAgentId
        ? (nameById.get(issue.assigneeAgentId) ?? null)
        : null,
      issueIdentifier: issue.identifier ?? null,
      responsibleUserName: null,
    };
  }

  /** Respond to a denied issue write with copy that names boundary, who, and path. */
  async function denyIssueWrite(
    req: Request,
    res: Response,
    issue: { identifier?: string | null; assigneeAgentId: string | null },
    code: IssueWriteDenialCode,
    extraDetails: Record<string, unknown> = {},
  ) {
    const labels = await issueWriteDenialLabels(req, issue);
    const { status, body } = issueWriteDenialResponse(code, labels);
    res.status(status).json({
      error: body.error,
      details: { ...body.details, ...extraDetails },
    });
    return false as const;
  }

  async function assertIssueReadAllowed(
    req: Request,
    res: Response,
    issue: Parameters<typeof decideIssueAccess>[1],
  ) {
    const key = `${issue.id}:${issue.companyId}:${issue.projectId ?? ""}:${issue.parentId ?? ""}:${issue.assigneeAgentId ?? ""}:${issue.assigneeUserId ?? ""}:${issue.status}`;
    const value = memoizeIssueReadDecision(req, key, () =>

View on GitHub (pinned to 3f1d897a7c)