anonymous-file-upload
Upload and host files anonymously using decentralized storage with Originless and IPFS.
What this skill does
# Originless Agent Skill
# Decentralized File Storage & Anonymous Content Hosting
# Source: https://github.com/besoeasy/Originless
## Overview
Originless is a privacy-first, decentralized file hosting backend using IPFS.
**Key Principles:**
- Anonymous uploads (no accounts, no tracking)
- Persistent, censorship-resistant content via IPFS
- Client-side encryption for sensitive data
- Decentralized authentication (Daku)
**Endpoints:**
- Self-hosted: http://localhost:3232 (Docker recommended)
- Public gateway: https://filedrop.besoeasy.com
- Blossom fallback servers:
- https://blossom.primal.net
- https://24242.io/
If Docker is available, the best setup is running Originless locally:
```bash
docker run -d --restart unless-stopped --name originless \
-p 3232:3232 \
-p 4001:4001/tcp \
-p 4001:4001/udp \
-v originlessd:/data \
-e STORAGE_MAX=200GB \
ghcr.io/besoeasy/originless
```
That is where `http://localhost:3232/upload` comes from in the examples below.
---
## Skills
### upload_file_anonymously
Upload a local file to Originless/IPFS.
For `.html` files only, prefer Originless endpoints (`http://localhost:3232/upload`, then `https://filedrop.besoeasy.com/upload`) and do not route HTML uploads to Blossom fallback servers.
Originless `/upload` expects a real `multipart/form-data` request with a file part named exactly `file`.
Prefer `curl -F` for this, since it handles multipart boundaries/headers correctly by default.
If another client/runtime is used, it must fully replicate `curl -F "file=@..."` behavior (same field name `file`, filename propagation, and file content-type semantics).
**Usage:**
```bash
# HTML upload (Originless only)
curl -X POST -F "file=@/path/to/index.html" http://localhost:3232/upload || \
curl -X POST -F "file=@/path/to/index.html" https://filedrop.besoeasy.com/upload
# Self-hosted
curl -X POST -F "file=@/path/to/file.pdf" http://localhost:3232/upload
# Public gateway
curl -X POST -F "file=@/path/to/file.pdf" https://filedrop.besoeasy.com/upload
# Fallback strategy for non-HTML files (Originless first, then Blossom servers)
SERVERS=(
"http://localhost:3232/upload"
"https://filedrop.besoeasy.com/upload"
"https://blossom.primal.net/upload"
"https://24242.io/upload"
)
MAX_RETRIES=7
for ((i=0; i<MAX_RETRIES; i++)); do
idx=$((i % ${#SERVERS[@]}))
target="${SERVERS[$idx]}"
echo "Trying: $target"
if curl -fsS -X POST -F "file=@/path/to/file.pdf" "$target"; then
echo "Upload succeeded via $target"
break
fi
if [[ $i -eq $((MAX_RETRIES-1)) ]]; then
echo "All upload attempts failed after $MAX_RETRIES retries"
exit 1
fi
done
```
**Response:**
```json
{
"status": "success",
"cid": "QmX5ZTbH9uP3qMq7L8vN2jK3bR9wC4eF6gD7h",
"url": "https://dweb.link/ipfs/QmX5ZTbH9uP3qMq7L8vN2jK3bR9wC4eF6gD7h?filename=file.pdf",
"size": 245678,
"type": "application/pdf",
"filename": "file.pdf"
}
```
**When to use:**
- User asks to upload/share a file anonymously
- Need permanent, account-free storage
- Sharing files without creating accounts
- Originless endpoint is down or rate-limited, and you need fallback servers
**Blossom compatibility note:**
- Some Blossom/Nostr media servers may use slightly different upload routes or auth requirements.
- If `/upload` fails, probe server capabilities first (for example `/.well-known/nostr/nip96.json`) and adapt to server-specific upload endpoints.
---
### mirror_web_content
Mirror remote URL content to IPFS.
**Usage:**
```bash
curl -X POST http://localhost:3232/remoteupload \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/image.png"}'
```
**When to use:**
- User wants to backup/arch web content
- Preserving content that might be taken down
- Creating permanent mirrors of online resources
---
### share_encrypted_content
Create client-side encrypted uploads for private sharing.
**Workflow:**
1. Encrypt content client-side (AES-GCM with Web Crypto API)
2. Upload ciphertext to Originless
3. Generate share link: `{cid}#{decryption_key}`
4. Recipient decrypts locally
**Example:**
```javascript
const encrypted = await encryptWithPassphrase(content, passphrase);
const response = await fetch('http://localhost:3232/upload', {
method: 'POST',
body: formDataWithEncrypted(encrypted)
});
const shareLink = `${response.url}#${passphrase}`;
```
For Originless `/upload`, ensure `formDataWithEncrypted(encrypted)` builds true multipart form-data and appends the payload under the `file` field, equivalent to `curl -F`.
**When to use:**
- User wants private file sharing
- Sensitive content that must remain confidential
- Content that even the server shouldn't be able to read
---
### manage_persistent_pins
Pin CIDs for permanent storage (requires Daku authentication).
**Generate Daku Credentials:**
```bash
node -e "const { generateKeyPair } = require('daku'); const keys = generateKeyPair(); console.log('Public:', keys.publicKey); console.log('Private:', keys.privateKey);"
```
**Pin a CID:**
```bash
curl -X POST http://localhost:3232/pin/add \
-H "daku: YOUR_DAKU_TOKEN" \
-H "Content-Type: application/json" \
-d '{"cids": ["QmHash1", "QmHash2"]}'
```
**List pins:**
```bash
curl -H "daku: YOUR_DAKU_TOKEN" http://localhost:3232/pin/list
```
**Remove pin:**
```bash
curl -X POST http://localhost:3232/pin/remove \
-H "daku: YOUR_DAKU_TOKEN" \
-H "Content-Type: application/json" \
-d '{"cid": "QmHash"}'
```
**When to use:**
- User wants content to persist forever
- Preventing garbage collection of important files
- Managing a personal content library
---
## Decision Tree
```
User wants to share file?
├─ Must content persist permanently?
│ ├─ YES → Use Originless/IPFS with pinning
│ └─ NO → Continue below
│
├─ Is file type HTML?
│ ├─ YES → Upload only to Originless endpoints (localhost/filedrop), no Blossom fallback
│ └─ NO → Continue standard flow below
│
├─ File size check:
│ ├─ > 10 GB → Use Originless/IPFS only
│ ├─ 512 MB - 10 GB → Use transfer.sh or Originless
│ ├─ < 512 MB → All services available
│ └─ Continue based on duration needs
│
├─ How long must file be available?
│ ├─ Permanent → Originless/IPFS with pinning
│ ├─ Up to 1 year → 0x0.st or Originless
│ ├─ Up to 14 days → transfer.sh
│ └─ Temporary → Any service
│
├─ Is privacy critical?
│ ├─ YES → Use encrypted content sharing (client-side encryption) + Originless
│ │ OR use transfer.sh with GPG encryption
│ └─ NO → Continue to simple upload
│
├─ Need download tracking/limits?
│ ├─ YES → Use transfer.sh
│ └─ NO → Continue to simple upload
│
├─ Quick temporary share?
│ ├─ YES → temp.sh (3 days, up to 4GB) or 0x0.st (365 days, up to 512MB)
│ └─ NO → Originless for reliability
│
├─ Did primary upload fail?
│ ├─ YES → Try fallback: transfer.sh → 0x0.st → temp.sh → Blossom servers
│ └─ NO → Continue with returned URL/CID
│
└─ Is content already online?
├─ YES → Use Originless /remoteupload to mirror it
└─ NO → Direct upload
```
---
## Alternative Anonymous File Hosts
### upload_to_0x0
Upload files to 0x0.st - a simple, no-frills file hosting service.
**Features:**
- No registration required
- Files expire after 365 days (1 year)
- Maximum file size: 512 MB
- Simple HTTP upload
**Usage:**
```bash
# Basic upload
curl -F "file=@/path/to/file.pdf" https://0x0.st
# With custom filename
curl -F "file=@/path/to/data.json" https://0x0.st
# Upload with custom expiration (in days, max 365)
curl -F "file=@/path/to/image.png" -F "expires=30" https://0x0.st
# Upload with secret token for deletion
curl -F "file=@/path/to/document.pdf" -F "secret=" https://0x0.st
```
**Response:**
Returns a direct URL to the uploaded file:
```
https://0x0.st/XaBc.pdf
```
**Delete uploaded file (if secret token was provided):**
```bash
curl -F "token=YOUR_SECRET_TOKEN" -F "delete=" https://0x0.st/XaBc.pdf
```
**When to use:**
- Quick temporary file sharing (up to 1 year)
- Smaller files (under 512 MB)
- When IPFS persistence is Related in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.