A tiny agent skill that uploads a local file to files.myslop.app and returns a permanent public URL. This is exactly what gets installed — read it before you do.
When your agent needs a shareable link to a local file (a screenshot for a PR, a log for Slack, an HTML report), this skill tells it how to upload the file with your API token and hand back the resulting URL. It only ever runs an upload curl against files.myslop.app using a token you minted — it has no other capabilities and reads no other files.
Adds this repo as a plugin marketplace, then installs the skill. Updatable with one command later.
Drop the file into your skills directory. Works for Claude Code and anything that reads SKILL.md files.
Or just paste this to any capable agent:
First upload will prompt you to authenticate — the skill runs curl -fsS https://files.myslop.app/setup.sh | bash, which opens a page that mints your token. See setup.sh before running it.
---
name: file-upload
description: Upload a local file (screenshot, recording, log, HTML artifact) to files.myslop.app and return a permanent public URL. Use whenever a shareable link to a local file is needed, including for GitHub pull requests, Slack messages, or sharing HTML documents.
---
# file-upload
Upload files to https://files.myslop.app and get back a permanent URL.
## Token
Resolve the API token in this order:
1. `$MYSLOP_FILES_TOKEN` if set
2. The file `${XDG_CONFIG_HOME:-$HOME/.config}/myslop-files/token` (shell-agnostic
fallback — works even if the user's shell never exported the variable)
If neither exists, or an upload returns `401 unauthorized` (token revoked), have
the user run this in an interactive terminal, then retry:
```sh
curl -fsS https://files.myslop.app/setup.sh | bash
```
It opens a page that signs them in and mints a token automatically (named after
their machine); they copy-paste it once and the script persists it for future
shells and writes the fallback file.
## Upload
```sh
TOKEN="${MYSLOP_FILES_TOKEN:-$(cat "${XDG_CONFIG_HOME:-$HOME/.config}/myslop-files/token")}"
curl -sS --fail-with-body -X PUT -T <local-path> \
-H "Authorization: Bearer $TOKEN" \
"https://files.myslop.app/<filename>"
```
- The response body is the permanent public URL (files are stored under a random,
non-enumerable prefix — always use the returned URL, never construct it).
- `<filename>` is the basename you want in the URL; prefer descriptive kebab-case.
- Content-Type is inferred from the extension; pass `-H "Content-Type: ..."` to override.
- Uploaded HTML is served as a browsable page (sandboxed), so sharing HTML
artifacts/reports works directly.
- Append `?private=1` for files only the account owner should see.
## After uploading
Return the URL to the user or embed it where they asked (PR body, Slack message,
etc.). Files are managed — private, delete, list — at
https://files.myslop.app/dashboard.