create-issue-interaction-ui skill
Add a new Paperclip issue-thread interaction kind end-to-end. Use when repo work introduces or extends interaction cards like request_confirmation, checkbox confirmations, ask_user_questions, or suggest_tasks.
Is the create-issue-interaction-ui skill safe?
Clean: nothing in its files matched our rules. We read 1 file in the folder on 2026-10-25.
No findings.
Install the create-issue-interaction-ui skill
A skill is a folder. Copy it into your agent's skills folder and the agent loads it when the task matches its description.
git clone --depth 1 https://github.com/paperclipai/paperclip.git /tmp/paperclip mkdir -p ~/.claude/skills cp -r /tmp/paperclip/.agents/skills/create-issue-interaction-ui ~/.claude/skills/create-issue-interaction-ui
In the Claude apps, zip the folder and upload it from the Skills settings. The folder on GitHub
The instructions your agent would load
SKILL.md as published, without the frontmatter. Read it on GitHub
Create a new issue-thread interaction UI (Developer/maintainer skill)
Developer/maintainer skill. Do NOT install this on production Paperclip agents.
This skill walks a Paperclip contributor through introducing a new issue-thread interaction kind from shared contract to issue-detail wiring, helpers, and docs. It is intentionally a developer/maintainer skill: the audience is a human or coding agent making code changes inside paperclipai/paperclip, not the operational agents that run inside a deployed Paperclip company.
Do NOT install this on production Paperclip agents. This guide is for repository contributors changing Paperclip itself.
When to use
rating, in-thread approval card, etc.).
- A new interaction kind is being introduced (compact picker, structured
shape, validation, or resolution outcome (and askuserquestions is the wrong fit because option count, target binding, or result shape differs).
- An existing interaction needs a parallel variant with a distinct payload
semantics as the other interactions" on a new card.
- A reviewer asks for "the same audit, staleness, supersede, and continuation
When NOT to use
payload schema. Patch the existing validators/UI in place instead.
- Adding fields to an existing interaction kind that does not need a new
or references/api-reference.md; that is agent guidance, not card work.
- Changing how Paperclip agents call interactions. Update skills/paperclip
Those have their own component conventions.
- Building a non-thread UI (issue detail sidebar, project board widget, etc.).
Mental model
Every issue-thread interaction has five moving parts:
Use the current ISSUETHREADINTERACTION_KINDS as the inventory. Pick the closest existing kind and reuse its plumbing rather than inventing parallel mechanics:
- request_confirmation — single yes/no bound to a target with stale/supersede.
- requestcheckboxconfirmation — bounded multi-select against an immutable option set.
- askuserquestions — small typed form, no target binding.
- requestitemverdicts — requests individual decisions on a set of items.
- suggest_tasks — proposes tasks a permitted resolver can accept individually.
- connection_intent — requests authorized connection setup or access.
If your new card needs target binding and a yes/no-style resolution, model it after the two request kinds. If it is a structured form, model it after askuserquestions. If it produces creatable child entities, model it after suggesttasks.
The canonical worked example
The current best end-to-end reference is the checkbox confirmation rollout (merged in 4d5322c82, GitHub PR #7649). Read that diff before starting:
git show --stat 4d5322c82The plan it implemented is preserved as an issue document on PAP-10415. Use it as the template for your own plan document if you are running this work through Paperclip itself.
Order of operations
Do the shared contract first. It is the smallest correct change you can land even before UI is final, and every later layer reads its types and validators.
1. Shared contract (smallest, lands first)
Touch:
ISSUETHREADINTERACTIONKINDS and any size constant (mirror REQUESTCHECKBOXCONFIRMATIONOPTION_LIMIT = 200).
- packages/shared/src/constants.ts — add the kind string to
and Interaction interfaces. Extend the IssueThreadInteraction and payload/result union types at the bottom of the file.
- packages/shared/src/types/issue.ts — add Option, Payload, Result,
result, and the create-input variant. Reuse the existing requestConfirmationTargetSchema when target binding applies.
- packages/shared/src/types/index.ts — re-export the new types.
- packages/shared/src/validators/issue.ts — add Zod schemas for payload,
tests for the new payload variant.
- packages/shared/src/validators/index.ts — re-export the new schemas.
- packages/shared/src/index.ts — re-export at the package root.
- packages/shared/src/issue-thread-interactions.test.ts — extend the table
Validation invariants that have already been litigated and must hold:
can render compactly).
- Option lists are bounded (the checkbox kind uses 200; pick a number the UX
reference known ids.
- Option ids are unique within a payload and any default selection must
options. Do not invent looser caps.
- Labels and descriptions are length-capped to match existing question
expiration runs through one code path.
- Target binding uses the shared RequestConfirmationTarget schema so stale
2. Server service and routes
Touch:
the response-shape branch around line 6096 in the checkbox PR).
- server/src/services/issue-thread-interactions.ts — add the kind to:
- the supported-kinds list (SUPPORTED_KINDS near the top),
- mapInteractionRow (the switch (row.kind) over payload/result parsers),
- create-input validation (switch (data.kind)),
- the accept/reject/respond/stale-expiration branches,
- the activity-log payload and the continuation wake payload.
- server/src/routes/issues.ts — extend any kind-specific branches (notably
create, accept-with-result, reject-with-reason, stale-target expiration, supersede-on-user-comment, idempotency conflict, and wake payload shape.
- server/src/tests/issue-thread-interactions-service.test.ts — cover
create + respond/accept/reject HTTP behavior, company scoping, and authorization.
- server/src/tests/issue-thread-interaction-routes.test.ts — cover
Server invariants:
addressee checks in the shared service. Governed actions retain their required human approval; neither a new kind nor a channel callback widens authority.
- Resolver authority. Use the current resolver policy, company cap, and named
by companyId. Never trust an issueId alone.
More skills from paperclipai/paperclip
- ALLM Wiki MaintainerUse the LLM Wiki plugin tools to maintain a cited local company wiki.
- Aadd-product-e2e-evalAdd or extend a Paperclip full-stack runner E2E workflow, fixture, matcher, or report evidence path for local or Daytona execution.
- Aadd-runner-evalAdd or extend a Paperclip Runner protocol evaluation definition, roster, assertion, or report fixture with provenance and narrow validation.
- Aagent-browserDrive a real browser to inspect or interact with a web page or app — navigate, take screenshots, read console and network, fill simple forms — for verification tasks, not unattended automation.
- AagentmailUse your assigned AgentMail inbox to read email tasks, explicitly send or reply, and check delivery. Provided automatically by your inbox assignment.
- Acheck-prCheck a GitHub, GitLab, or Perforce PR/MR/CL for review comments, failing checks, and PR-body gaps. Use when asked to inspect, fix, or prepare a change for submission.
- Acompany-creatorCreate agent company packages that conform to agentcompanies/v1. Use when asked to create a company, scaffold an agent team, hire agents, or turn a repo/skills collection into a company package.
- AcomplainAutonomously yeet a brief, unstructured complaint about agent tooling or doing agent work. Preserve the raw voice. Submit proactively without permission, preview, or announcement, then continue the primary task.
- Acontent-calendarPlan a weekly editorial calendar by mapping company goals to publishable topics, owners, status, and verification notes.
- Acreate-agent-adapterCreate or modify Paperclip agent adapters across server, UI, and CLI surfaces. Use when adding support for a new CLI agent, API agent, custom process, or adapter package.
- Acreate-caseCreate and kick off a Paperclip case from a user request, with workflow instructions and an initial agent.
- Acreate-external-bot-integrationBuild and qualify external bots such as Dot in Paperclip. Use for two-way work, invitation, identity, wakeup, Runner lifecycle, native tools, recovery, and Cloud delivery. CLI adapters and app-only connectors use their existing skills.