doc/AGENT-ARTIFACTS.md
Generated files that a board user or reviewer should inspect must be attached to the Paperclip issue before the agent chooses a final disposition. A local workspace path is not enough, because cloud users and reviewers often cannot access the agent's disk.
Use the helper bundled with the Paperclip skill from the repo root:
skills/paperclip/scripts/paperclip-upload-artifact.sh path/to/output.webm \
--title "Walkthrough render" \
--summary "Rendered walkthrough for review"
The helper uses the authenticated Paperclip API from the current heartbeat environment:
PAPERCLIP_API_URLPAPERCLIP_API_KEYPAPERCLIP_COMPANY_IDPAPERCLIP_TASK_IDPAPERCLIP_RUN_IDIt uploads the file to
POST /api/companies/{companyId}/issues/{issueId}/attachments and creates an
artifact work product on POST /api/issues/{issueId}/work-products by default.
The command prints issue-safe markdown links for the final task comment.
When a task produces a user-inspectable file:
skills/paperclip/scripts/paperclip-upload-artifact.sh.--no-work-product only for supporting files that should not be promoted.Final comments should name the uploaded artifact, not just the local filesystem path. Local paths can be included as diagnostic context, but they cannot be the only access path.
Upload an .mp4 render:
skills/paperclip/scripts/paperclip-upload-artifact.sh dist/demo.mp4 \
--title "Demo video render" \
--summary "MP4 render for board review"
Upload a .webm render:
skills/paperclip/scripts/paperclip-upload-artifact.sh out/walkthrough.webm \
--title "Walkthrough video" \
--summary "WebM walkthrough render"
The helper detects .mp4, .webm, and .mov content types. If a renderer uses
an unusual extension, pass the MIME type explicitly:
skills/paperclip/scripts/paperclip-upload-artifact.sh render.bin \
--title "Demo video render" \
--content-type video/mp4
If the helper is unavailable, use the same API shape:
curl -sS -X POST \
"$PAPERCLIP_API_URL/api/companies/$PAPERCLIP_COMPANY_ID/issues/$PAPERCLIP_TASK_ID/attachments" \
-H "Authorization: Bearer $PAPERCLIP_API_KEY" \
-H "X-Paperclip-Run-Id: $PAPERCLIP_RUN_ID" \
-F 'file=@"dist/demo.mp4";type=video/mp4'
Then create a work product when the uploaded file is the deliverable:
curl -sS -X POST \
"$PAPERCLIP_API_URL/api/issues/$PAPERCLIP_TASK_ID/work-products" \
-H "Authorization: Bearer $PAPERCLIP_API_KEY" \
-H "X-Paperclip-Run-Id: $PAPERCLIP_RUN_ID" \
-H "Content-Type: application/json" \
--data-binary @artifact-work-product.json
Use type: "artifact", provider: "paperclip", and metadata containing the
uploaded attachmentId. The server canonicalizes contentType, byteSize,
contentPath, openPath, downloadPath, and originalFilename.