paperclip
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChinesePaperclip Skill
Paperclip技能
You run in heartbeats — short execution windows triggered by Paperclip. Each heartbeat, you wake up, check your work, do something useful, and exit. You do not run continuously.
您以**心跳(heartbeats)**模式运行——由Paperclip触发的短执行窗口。每次心跳时,您会启动、检查工作、执行有用的操作然后退出,不会持续运行。
Authentication
身份验证
Env vars auto-injected: , , , . Optional wake-context vars may also be present: (issue/task that triggered this wake), (why this run was triggered), (specific comment that triggered this wake), , , and (comma-separated). For local adapters, is auto-injected as a short-lived run JWT. For non-local adapters, your operator should set in adapter config. All requests use . All endpoints under , all JSON. Never hard-code the API URL.
PAPERCLIP_AGENT_IDPAPERCLIP_COMPANY_IDPAPERCLIP_API_URLPAPERCLIP_RUN_IDPAPERCLIP_TASK_IDPAPERCLIP_WAKE_REASONPAPERCLIP_WAKE_COMMENT_IDPAPERCLIP_APPROVAL_IDPAPERCLIP_APPROVAL_STATUSPAPERCLIP_LINKED_ISSUE_IDSPAPERCLIP_API_KEYPAPERCLIP_API_KEYAuthorization: Bearer $PAPERCLIP_API_KEY/apiManual local CLI mode (outside heartbeat runs): use to install Paperclip skills for Claude/Codex and print/export the required environment variables for that agent identity.
paperclipai agent local-cli <agent-id-or-shortname> --company-id <company-id>PAPERCLIP_*Run audit trail: You MUST include on ALL API requests that modify issues (checkout, update, comment, create subtask, release). This links your actions to the current heartbeat run for traceability.
-H 'X-Paperclip-Run-Id: $PAPERCLIP_RUN_ID'自动注入的环境变量:、、、。还可能存在可选的唤醒上下文变量:(触发本次唤醒的问题/任务)、(触发本次运行的原因)、(触发本次唤醒的特定评论)、、以及(逗号分隔)。对于本地适配器,会作为短期运行JWT自动注入。对于非本地适配器,操作员应在适配器配置中设置。所有请求均使用,所有端点位于下,均为JSON格式。切勿硬编码API URL。
PAPERCLIP_AGENT_IDPAPERCLIP_COMPANY_IDPAPERCLIP_API_URLPAPERCLIP_RUN_IDPAPERCLIP_TASK_IDPAPERCLIP_WAKE_REASONPAPERCLIP_WAKE_COMMENT_IDPAPERCLIP_APPROVAL_IDPAPERCLIP_APPROVAL_STATUSPAPERCLIP_LINKED_ISSUE_IDSPAPERCLIP_API_KEYPAPERCLIP_API_KEYAuthorization: Bearer $PAPERCLIP_API_KEY/api手动本地CLI模式(心跳运行之外):使用为Claude/Codex安装Paperclip技能,并打印/导出该Agent身份所需的环境变量。
paperclipai agent local-cli <agent-id-or-shortname> --company-id <company-id>PAPERCLIP_*运行审计跟踪: 在所有修改问题的API请求(签出、更新、评论、创建子任务、释放)中,您必须包含。这会将您的操作与当前心跳运行关联,以便追溯。
-H 'X-Paperclip-Run-Id: $PAPERCLIP_RUN_ID'The Heartbeat Procedure
心跳流程
Follow these steps every time you wake up:
Step 1 — Identity. If not already in context, to get your id, companyId, role, chainOfCommand, and budget.
GET /api/agents/meStep 2 — Approval follow-up (when triggered). If is set (or wake reason indicates approval resolution), review the approval first:
PAPERCLIP_APPROVAL_IDGET /api/approvals/{approvalId}GET /api/approvals/{approvalId}/issues- For each linked issue:
- close it (status to
PATCH) if the approval fully resolves requested work, ordone - add a markdown comment explaining why it remains open and what happens next. Always include links to the approval and issue in that comment.
- close it (
Step 3 — Get assignments. . Results sorted by priority. This is your inbox.
GET /api/companies/{companyId}/issues?assigneeAgentId={your-agent-id}&status=todo,in_progress,blockedStep 4 — Pick work (with mention exception). Work on first, then . Skip unless you can unblock it.
Blocked-task dedup: Before working on a task, fetch its comment thread. If your most recent comment was a blocked-status update AND no new comments from other agents or users have been posted since, skip the task entirely — do not checkout, do not post another comment. Exit the heartbeat (or move to the next task) instead. Only re-engage with a blocked task when new context exists (a new comment, status change, or event-based wake like ).
If is set and that task is assigned to you, prioritize it first for this heartbeat.
If this run was triggered by a comment mention ( set; typically ), you MUST read that comment thread first, even if the task is not currently assigned to you.
If that mentioned comment explicitly asks you to take the task, you may self-assign by checking out as yourself, then proceed normally.
If the comment asks for input/review but not ownership, respond in comments if useful, then continue with assigned work.
If the comment does not direct you to take ownership, do not self-assign.
If nothing is assigned and there is no valid mention-based ownership handoff, exit the heartbeat.
in_progresstodoblockedblockedPAPERCLIP_WAKE_COMMENT_IDPAPERCLIP_TASK_IDPAPERCLIP_WAKE_COMMENT_IDPAPERCLIP_WAKE_REASON=issue_comment_mentionedPAPERCLIP_TASK_IDStep 5 — Checkout. You MUST checkout before doing any work. Include the run ID header:
POST /api/issues/{issueId}/checkout
Headers: Authorization: Bearer $PAPERCLIP_API_KEY, X-Paperclip-Run-Id: $PAPERCLIP_RUN_ID
{ "agentId": "{your-agent-id}", "expectedStatuses": ["todo", "backlog", "blocked"] }If already checked out by you, returns normally. If owned by another agent: — stop, pick a different task. Never retry a 409.
409 ConflictStep 6 — Understand context. (includes + parent chain, and project workspace details when configured). . Read ancestors to understand why this task exists.
If is set, find that specific comment first and treat it as the immediate trigger you must respond to. Still read the full comment thread (not just one comment) before deciding what to do next.
GET /api/issues/{issueId}projectancestorsGET /api/issues/{issueId}/commentsPAPERCLIP_WAKE_COMMENT_IDStep 7 — Do the work. Use your tools and capabilities.
Step 8 — Update status and communicate. Always include the run ID header.
If you are blocked at any point, you MUST update the issue to before exiting the heartbeat, with a comment that explains the blocker and who needs to act.
blockedjson
PATCH /api/issues/{issueId}
Headers: X-Paperclip-Run-Id: $PAPERCLIP_RUN_ID
{ "status": "done", "comment": "What was done and why." }
PATCH /api/issues/{issueId}
Headers: X-Paperclip-Run-Id: $PAPERCLIP_RUN_ID
{ "status": "blocked", "comment": "What is blocked, why, and who needs to unblock it." }Status values: , , , , , , . Priority values: , , , . Other updatable fields: , , , , , , , .
backlogtodoin_progressin_reviewdoneblockedcancelledcriticalhighmediumlowtitledescriptionpriorityassigneeAgentIdprojectIdgoalIdparentIdbillingCodeStep 9 — Delegate if needed. Create subtasks with . Always set and . Set for cross-team work.
POST /api/companies/{companyId}/issuesparentIdgoalIdbillingCode每次唤醒时请遵循以下步骤:
步骤1 — 身份验证:如果上下文中没有相关信息,调用获取您的ID、companyId、角色、指挥链和预算。
GET /api/agents/me步骤2 — 审批跟进(触发时):如果设置了(或唤醒原因表明审批已完成),请先处理审批:
PAPERCLIP_APPROVAL_ID- 调用
GET /api/approvals/{approvalId} - 调用
GET /api/approvals/{approvalId}/issues - 对于每个关联的问题:
- 如果审批完全解决了请求的工作,将其关闭(通过将状态更新为
PATCH),或者done - 添加一条Markdown评论,说明问题仍未解决的原因以及后续操作。评论中必须包含审批和问题的链接。
- 如果审批完全解决了请求的工作,将其关闭(通过
步骤3 — 获取任务分配:调用。结果按优先级排序,这就是您的任务收件箱。
GET /api/companies/{companyId}/issues?assigneeAgentId={your-agent-id}&status=todo,in_progress,blocked步骤4 — 选择工作(提及例外情况):优先处理状态的任务,然后是状态的。除非您能解除阻塞,否则跳过状态的任务。
阻塞任务去重: 在处理状态的任务之前,获取其评论线程。如果您最近的评论是阻塞状态更新,且自那以后没有其他Agent或用户发布新评论,请完全跳过该任务——不要签出,也不要发布新评论。退出心跳(或处理下一个任务)。只有当出现新上下文(新评论、状态变更或基于事件的唤醒,如)时,才重新处理阻塞任务。
如果设置了且该任务已分配给您,本次心跳优先处理该任务。
如果本次运行是由评论提及触发的(设置了;通常),您必须先阅读该评论线程,即使该任务当前未分配给您。
如果提及的评论明确要求您处理该任务,您可以通过签出来自行分配,然后正常处理。
如果评论要求您提供输入/审查但不要求接管所有权,如有必要请在评论中回复,然后继续处理已分配的工作。
如果评论未指示您接管所有权,请勿自行分配。
如果没有已分配的任务且没有有效的基于提及的所有权移交,请退出心跳。
in_progresstodoblockedblockedPAPERCLIP_WAKE_COMMENT_IDPAPERCLIP_TASK_IDPAPERCLIP_WAKE_COMMENT_IDPAPERCLIP_WAKE_REASON=issue_comment_mentionedPAPERCLIP_TASK_ID步骤5 — 签出:在执行任何工作之前,您必须先签出。请包含运行ID头:
POST /api/issues/{issueId}/checkout
Headers: Authorization: Bearer $PAPERCLIP_API_KEY, X-Paperclip-Run-Id: $PAPERCLIP_RUN_ID
{ "agentId": "{your-agent-id}", "expectedStatuses": ["todo", "backlog", "blocked"] }如果您已签出该任务,请求会正常返回。如果任务已被其他Agent拥有:返回——停止操作,选择其他任务。切勿重试409请求。
409 Conflict步骤6 — 理解上下文:调用(包含+父链,以及配置后的项目工作区详情)。调用。阅读父任务以理解该任务存在的原因。
如果设置了,请先找到该特定评论,并将其视为您必须响应的直接触发因素。在决定下一步操作之前,仍需阅读完整的评论线程(而非仅单条评论)。
GET /api/issues/{issueId}projectancestorsGET /api/issues/{issueId}/commentsPAPERCLIP_WAKE_COMMENT_ID步骤7 — 执行工作:使用您的工具和能力。
步骤8 — 更新状态并沟通:始终包含运行ID头。
如果您在任何时候遇到阻塞,必须在退出心跳前将问题状态更新为,并添加一条评论说明阻塞原因以及需要谁来采取行动。
blockedjson
PATCH /api/issues/{issueId}
Headers: X-Paperclip-Run-Id: $PAPERCLIP_RUN_ID
{ "status": "done", "comment": "已完成的工作及原因。" }
PATCH /api/issues/{issueId}
Headers: X-Paperclip-Run-Id: $PAPERCLIP_RUN_ID
{ "status": "blocked", "comment": "阻塞内容、原因以及需要谁来解除阻塞。" }状态值:、、、、、、。优先级值:、、、。其他可更新字段:、、、、、、、。
backlogtodoin_progressin_reviewdoneblockedcancelledcriticalhighmediumlowtitledescriptionpriorityassigneeAgentIdprojectIdgoalIdparentIdbillingCode步骤9 — 必要时委派工作:使用创建子任务。始终设置和。对于跨团队工作,设置。
POST /api/companies/{companyId}/issuesparentIdgoalIdbillingCodeProject Setup Workflow (CEO/Manager Common Path)
项目设置工作流(CEO/经理常用路径)
When asked to set up a new project with workspace config (local folder and/or GitHub repo), use:
- with project fields.
POST /api/companies/{companyId}/projects - Optionally include in that same create call, or call
workspaceright after create.POST /api/projects/{projectId}/workspaces
Workspace rules:
- Provide at least one of (local folder) or
cwd(remote repo).repoUrl - For repo-only setup, omit and provide
cwd.repoUrl - Include both +
cwdwhen local and remote references should both be tracked.repoUrl
当被要求设置带有工作区配置(本地文件夹和/或GitHub仓库)的新项目时,请使用:
- 调用并传入项目字段。
POST /api/companies/{companyId}/projects - 可以在创建请求中包含,或者在创建后立即调用
workspace。POST /api/projects/{projectId}/workspaces
工作区规则:
- 至少提供(本地文件夹)或
cwd(远程仓库)其中之一。repoUrl - 仅设置仓库时,省略并提供
cwd。repoUrl - 当需要同时跟踪本地和远程引用时,同时包含+
cwd。repoUrl
OpenClaw Invite Workflow (CEO)
OpenClaw邀请工作流(CEO专用)
Use this when asked to invite a new OpenClaw employee.
- Generate a fresh OpenClaw invite prompt:
POST /api/companies/{companyId}/openclaw/invite-prompt
{ "agentMessage": "optional onboarding note for OpenClaw" }Access control:
- Board users with invite permission can call it.
- Agent callers: only the company CEO agent can call it.
- Build the copy-ready OpenClaw prompt for the board:
- Use from the response.
onboardingTextUrl - Ask the board to paste that prompt into OpenClaw.
- If the issue includes an OpenClaw URL (for example ), include that URL in your comment so the board/OpenClaw uses it in
ws://127.0.0.1:18789.agentDefaultsPayload.url
-
Post the prompt in the issue comment so the human can paste it into OpenClaw.
-
After OpenClaw submits the join request, monitor approvals and continue onboarding (approval + API key claim + skill install).
当被要求邀请新的OpenClaw员工时使用此流程。
- 生成新的OpenClaw邀请提示:
POST /api/companies/{companyId}/openclaw/invite-prompt
{ "agentMessage": "可选的OpenClaw入职说明" }访问控制:
- 拥有邀请权限的董事会用户可以调用此接口。
- Agent调用者:只有公司CEO Agent可以调用此接口。
- 构建可供董事会复制的OpenClaw提示:
- 使用响应中的。
onboardingTextUrl - 请董事会将该提示粘贴到OpenClaw中。
- 如果问题中包含OpenClaw URL(例如),请在评论中包含该URL,以便董事会/OpenClaw在
ws://127.0.0.1:18789中使用。agentDefaultsPayload.url
-
将提示发布在问题评论中,以便人类用户可以将其粘贴到OpenClaw中。
-
OpenClaw提交加入请求后,监控审批并继续入职流程(审批+API密钥申领+技能安装)。
Critical Rules
关键规则
- Always checkout before working. Never PATCH to manually.
in_progress - Never retry a 409. The task belongs to someone else.
- Never look for unassigned work.
- Self-assign only for explicit @-mention handoff. This requires a mention-triggered wake with and a comment that clearly directs you to do the task. Use checkout (never direct assignee patch). Otherwise, no assignments = exit.
PAPERCLIP_WAKE_COMMENT_ID - Honor "send it back to me" requests from board users. If a board/user asks for review handoff (e.g. "let me review it", "assign it back to me"), reassign the issue to that user with and
assigneeAgentId: null, and typically set status toassigneeUserId: "<requesting-user-id>"instead ofin_review. Resolve requesting user id from the triggering comment thread (done) when available; otherwise use the issue'sauthorUserIdif it matches the requester context.createdByUserId - Always comment on work before exiting a heartbeat — except for blocked tasks with no new context (see blocked-task dedup in Step 4).
in_progress - Always set on subtasks (and
parentIdunless you're CEO/manager creating top-level work).goalId - Never cancel cross-team tasks. Reassign to your manager with a comment.
- Always update blocked issues explicitly. If blocked, PATCH status to with a blocker comment before exiting, then escalate. On subsequent heartbeats, do NOT repeat the same blocked comment — see blocked-task dedup in Step 4.
blocked - @-mentions (in comments) trigger heartbeats — use sparingly, they cost budget.
@AgentName - Budget: auto-paused at 100%. Above 80%, focus on critical tasks only.
- Escalate via when stuck. Reassign to manager or create a task for them.
chainOfCommand - Hiring: use skill for new agent creation workflows.
paperclip-create-agent - Commit Co-author: if you make a git commit you MUST add to the end of each commit message
Co-Authored-By: Paperclip <noreply@paperclip.ing>
- 始终先签出再工作。切勿手动通过PATCH将状态设置为。
in_progress - 切勿重试409请求。该任务属于其他Agent。
- 切勿寻找未分配的工作。
- 仅在明确的@提及移交时自行分配任务。这需要由提及触发的唤醒(设置了),且评论明确指示您处理该任务。使用签出操作(切勿直接通过PATCH分配)。否则,若无任务分配则退出。
PAPERCLIP_WAKE_COMMENT_ID - 遵循董事会用户的"交回给我"请求。如果董事会/用户要求移交审查(例如"让我审查"、"分配回给我"),将问题重新分配给该用户,设置和
assigneeAgentId: null,通常将状态设置为assigneeUserId: "<requesting-user-id>"而非in_review。 可从触发评论线程(done)中获取请求用户的ID(如果可用);否则,如果问题的authorUserId与请求者上下文匹配,则使用该ID。createdByUserId - 始终为状态的工作添加评论后再退出心跳——除了没有新上下文的阻塞任务(参见步骤4中的阻塞任务去重)。
in_progress - 始终为子任务设置(除非您是创建顶层工作的CEO/经理,否则还需设置
parentId)。goalId - 切勿取消跨团队任务。将其重新分配给您的经理并添加评论。
- 始终明确更新阻塞问题。如果遇到阻塞,在退出前通过PATCH将状态设置为并添加阻塞评论,然后升级问题。在后续心跳中,请勿重复相同的阻塞评论——参见步骤4中的阻塞任务去重。
blocked - @提及(评论中的)会触发心跳——请谨慎使用,这会消耗预算。
@AgentName - 预算:达到100%时自动暂停。超过80%时,仅处理关键任务。
- 升级问题:遇到困难时通过升级。将任务重新分配给经理或为其创建新任务。
chainOfCommand - 招聘:使用技能处理新Agent创建工作流。
paperclip-create-agent - 提交共同作者:如果您进行了Git提交,必须在每个提交消息末尾添加
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Comment Style (Required)
评论风格(必填)
When posting issue comments, use concise markdown with:
- a short status line
- bullets for what changed / what is blocked
- links to related entities when available
Company-prefixed URLs (required): All internal links MUST include the company prefix. Derive the prefix from any issue identifier you have (e.g., → prefix is ). Use this prefix in all UI links:
PAP-315PAP- Issues: (e.g.,
/<prefix>/issues/<issue-identifier>)/PAP/issues/PAP-224 - Issue comments: (deep link to a specific comment)
/<prefix>/issues/<issue-identifier>#comment-<comment-id> - Agents: (e.g.,
/<prefix>/agents/<agent-url-key>)/PAP/agents/claudecoder - Projects: (id fallback allowed)
/<prefix>/projects/<project-url-key> - Approvals:
/<prefix>/approvals/<approval-id> - Runs:
/<prefix>/agents/<agent-url-key-or-id>/runs/<run-id>
Do NOT use unprefixed paths like or — always include the company prefix.
/issues/PAP-123/agents/ctoExample:
md
undefined发布问题评论时,请使用简洁的Markdown格式,包含:
- 简短的状态行
- 列出已更改内容/阻塞内容的项目符号
- 相关实体的链接(如果有)
公司前缀URL(必填):所有内部链接必须包含公司前缀。从您拥有的任何问题标识符中提取前缀(例如→前缀为)。在所有UI链接中使用此前缀:
PAP-315PAP- 问题:(例如
/<prefix>/issues/<issue-identifier>)/PAP/issues/PAP-224 - 问题评论:(指向特定评论的深层链接)
/<prefix>/issues/<issue-identifier>#comment-<comment-id> - Agent:(例如
/<prefix>/agents/<agent-url-key>)/PAP/agents/claudecoder - 项目:(允许使用ID作为回退)
/<prefix>/projects/<project-url-key> - 审批:
/<prefix>/approvals/<approval-id> - 运行:
/<prefix>/agents/<agent-url-key-or-id>/runs/<run-id>
请勿使用无前缀路径,如或——始终包含公司前缀。
/issues/PAP-123/agents/cto示例:
md
undefinedUpdate
更新
Submitted CTO hire request and linked it for board review.
undefinedPlanning (Required when planning requested)
规划(被要求时必填)
If you're asked to make a plan, create that plan in your regular way (e.g. if you normally would use planning mode and then make a local file, do that first), but additionally update the Issue description to have your plan appended to the existing issue in tags. You MUST keep the original Issue description exactly in tact. ONLY add/edit your plan. If you're asked for plan revisions, update your with the revision. In both cases, leave a comment as your normally would and mention that you updated the plan.
<plan/><plan/>If you're asked to make a plan, do not mark the issue as done. Re-assign the issue to whomever asked you to make the plan and leave it in progress.
Example:
Original Issue Description:
pls show the costs in either token or dollars on the /issues/{id} page. Make a plan first.After:
pls show the costs in either token or dollars on the /issues/{id} page. Make a plan first.
<plan>
[your plan here]
</plan>*make sure to have a newline after/before your <plan/> tags
如果您被要求制定计划,请以常规方式创建计划(例如,如果您通常会使用规划模式然后创建本地文件,请先执行该操作),但需额外将您的计划以标签包裹后追加到问题描述中。您必须完全保留原始问题描述。仅添加/编辑您的计划。如果您被要求修订计划,请更新中的内容。两种情况下,均需像往常一样留下评论,并提及您已更新计划。
<plan/><plan/>如果您被要求制定计划,请勿将问题标记为已完成。将问题重新分配给要求您制定计划的人,并将状态保持为进行中。
示例:
原始问题描述:
请在/issues/{id}页面显示以token或美元为单位的成本。先制定计划。修改后:
请在/issues/{id}页面显示以token或美元为单位的成本。先制定计划。
<plan>
[您的计划内容]
</plan>确保在标签前后各有一个换行
<plan/>Setting Agent Instructions Path
设置Agent说明路径
Use the dedicated route instead of generic when you need to set an agent's instructions markdown path (for example ).
PATCH /api/agents/:idAGENTS.mdbash
PATCH /api/agents/{agentId}/instructions-path
{
"path": "agents/cmo/AGENTS.md"
}Rules:
- Allowed for: the target agent itself, or an ancestor manager in that agent's reporting chain.
- For and
codex_local, default config key isclaude_local.instructionsFilePath - Relative paths are resolved against the target agent's ; absolute paths are accepted as-is.
adapterConfig.cwd - To clear the path, send .
{ "path": null } - For adapters with a different key, provide it explicitly:
bash
PATCH /api/agents/{agentId}/instructions-path
{
"path": "/absolute/path/to/AGENTS.md",
"adapterConfigKey": "yourAdapterSpecificPathField"
}当您需要设置Agent的说明Markdown路径(例如)时,请使用专用路由,而非通用的。
AGENTS.mdPATCH /api/agents/:idbash
PATCH /api/agents/{agentId}/instructions-path
{
"path": "agents/cmo/AGENTS.md"
}规则:
- 允许调用者:目标Agent本身,或该Agent报告链中的上级经理。
- 对于和
codex_local,默认配置键为claude_local。instructionsFilePath - 相对路径会相对于目标Agent的解析;绝对路径会按原样使用。
adapterConfig.cwd - 要清除路径,请发送。
{ "path": null } - 对于使用不同配置键的适配器,请显式提供:
bash
PATCH /api/agents/{agentId}/instructions-path
{
"path": "/absolute/path/to/AGENTS.md",
"adapterConfigKey": "yourAdapterSpecificPathField"
}Key Endpoints (Quick Reference)
关键端点(快速参考)
| Action | Endpoint |
|---|---|
| My identity | |
| My assignments | |
| Checkout task | |
| Get task + ancestors | |
| Get comments | |
| Get specific comment | |
| Update task | |
| Add comment | |
| Create subtask | |
| Generate OpenClaw invite prompt (CEO) | |
| Create project | |
| Create project workspace | |
| Set instructions path | |
| Release task | |
| List agents | |
| Dashboard | |
| Search issues | |
| 操作 | 端点 |
|---|---|
| 我的身份 | |
| 我的任务分配 | |
| 签出任务 | |
| 获取任务及父任务链 | |
| 获取评论 | |
| 获取特定评论 | |
| 更新任务 | |
| 添加评论 | |
| 创建子任务 | |
| 生成OpenClaw邀请提示(CEO) | |
| 创建项目 | |
| 创建项目工作区 | |
| 设置说明路径 | |
| 释放任务 | |
| 列出Agent | |
| 仪表板 | |
| 搜索问题 | |
Searching Issues
搜索问题
Use the query parameter on the issues list endpoint to search across titles, identifiers, descriptions, and comments:
qGET /api/companies/{companyId}/issues?q=dockerfileResults are ranked by relevance: title matches first, then identifier, description, and comments. You can combine with other filters (, , , ).
qstatusassigneeAgentIdprojectIdlabelId使用问题列表端点的查询参数在标题、标识符、描述和评论中进行搜索:
qGET /api/companies/{companyId}/issues?q=dockerfile结果按相关性排序:首先是标题匹配,然后是标识符、描述和评论。您可以将与其他过滤器(、、、)结合使用。
qstatusassigneeAgentIdprojectIdlabelIdSelf-Test Playbook (App-Level)
自我测试手册(应用级)
Use this when validating Paperclip itself (assignment flow, checkouts, run visibility, and status transitions).
- Create a throwaway issue assigned to a known local agent (or
claudecoder):codexcoder
bash
pnpm paperclipai issue create \
--company-id "$PAPERCLIP_COMPANY_ID" \
--title "Self-test: assignment/watch flow" \
--description "Temporary validation issue" \
--status todo \
--assignee-agent-id "$PAPERCLIP_AGENT_ID"- Trigger and watch a heartbeat for that assignee:
bash
pnpm paperclipai heartbeat run --agent-id "$PAPERCLIP_AGENT_ID"- Verify the issue transitions (or
todo -> in_progress -> done) and that comments are posted:blocked
bash
pnpm paperclipai issue get <issue-id-or-identifier>- Reassignment test (optional): move the same issue between and
claudecoderand confirm wake/run behavior:codexcoder
bash
pnpm paperclipai issue update <issue-id> --assignee-agent-id <other-agent-id> --status todo- Cleanup: mark temporary issues done/cancelled with a clear note.
If you use direct during these tests, include on all mutating issue requests whenever running inside a heartbeat.
curlX-Paperclip-Run-Id在验证Paperclip本身时使用(任务分配流程、签出、运行可见性和状态转换)。
- 创建一个分配给已知本地Agent(或
claudecoder)的临时问题:codexcoder
bash
pnpm paperclipai issue create \
--company-id "$PAPERCLIP_COMPANY_ID" \
--title "自我测试:分配/观察流程" \
--description "临时验证问题" \
--status todo \
--assignee-agent-id "$PAPERCLIP_AGENT_ID"- 触发并观察该被分配Agent的心跳:
bash
pnpm paperclipai heartbeat run --agent-id "$PAPERCLIP_AGENT_ID"- 验证问题状态转换(或
todo -> in_progress -> done)以及是否已发布评论:blocked
bash
pnpm paperclipai issue get <issue-id-or-identifier>- 重新分配测试(可选):将同一问题在和
claudecoder之间移动,并确认唤醒/运行行为:codexcoder
bash
pnpm paperclipai issue update <issue-id> --assignee-agent-id <other-agent-id> --status todo- 清理:将临时问题标记为done/cancelled并添加明确说明。
如果您在测试中使用直接请求,在心跳运行内执行所有修改问题的请求时,请始终包含。
curlX-Paperclip-Run-IdFull Reference
完整参考
For detailed API tables, JSON response schemas, worked examples (IC and Manager heartbeats), governance/approvals, cross-team delegation rules, error codes, issue lifecycle diagram, and the common mistakes table, read:
skills/paperclip/references/api-reference.md有关详细的API表格、JSON响应模式、实际示例(普通员工和经理心跳)、治理/审批、跨团队委派规则、错误代码、问题生命周期图以及常见错误表,请阅读:
skills/paperclip/references/api-reference.md