goal-attach-file
Attach a small file (mockup, diagram, screenshot, PDF) to a GOAL as a description attachment — NOT evidence: it is not bound to any acceptance criterion, is never judged and never counts toward closing the goal. Returns {attachment.url, attachment.markdown}; paste markdown into the goal description (goal-update description) and the web UI renders images inline.
contentBase64 is reliable only for payloads ≤ ~1 KB (long string arguments get truncated on the agent side before the request is sent). For anything bigger call goal-request-upload with goalId and stream the file with a single PUT — same result shape, no base64.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| goalId | Yes | UUID of the goal the file illustrates | |
| caption | No | Optional alt-text / caption used in the markdown fragment | |
| filename | Yes | Original file name (basename only; used for download + markdown alt) | |
| mimeType | No | Optional MIME hint; server sniffs bytes when omitted or not whitelisted | |
| createdBy | No | Identifier of the uploading agent | |
| contentBase64 | Yes | File bytes, standard base64 (RFC 4648). Tiny files only — see description. | |
| contentSha256 | No | Optional hex sha256 of the raw bytes — server fails fast on transport corruption |