---
name: redok
description: Personal Dropbox / WeTransfer — self-hosted file share with shareable preview links. Upload any file (video, image, PDF, archive, anything up to 10GB) and get a short URL with inline preview + download. TRIGGER when the user says "redok this", "redok <file>", "upload to redok", "share via redok", "get me a link for <file>", "send <file> to <person>", "drop this on redok", "redok up", "make a redok link", or any request to share a local file as a public URL. Bring-your-own-server — point at any redok-protocol endpoint with your token.
---


# redok

Self-hosted file-share. Upload to your own server, get short links like `https://yourdomain/f/<id>` that show inline preview (video player / image / PDF / audio) with a download button. Embeds nicely in Telegram / iMessage / Discord (OG tags + Twitter card). Reference instance: https://redok.xyz.

## Setup (one time)

This skill is **bring-your-own-server**. It talks to a small Node.js server you run on your VPS — not a hosted service. Two things to configure:

### 1. Server endpoint

Default: `https://redok.xyz` (the author's instance — you can't upload there without a token).

Override with the `REDOK_BASE` env var:

```bash
export REDOK_BASE="https://files.yourdomain.com"
```

Add it to your shell profile (`~/.zshrc` or `~/.bashrc`) to make it stick.

### 2. API token

Save your server's `API_TOKEN` (the value of the `API_TOKEN=` line in the server's `.env`) to a file the CLI reads:

```bash
echo -n 'rdk_yourtokenhere' > ~/.claude/skills/redok/.token
chmod 600 ~/.claude/skills/redok/.token
```

OR set it in the env every time:

```bash
export REDOK_TOKEN="rdk_yourtokenhere"
```

### Need to spin up the server?

Ask Claude: *"set up a redok server on my VPS"* — Claude can deploy the Node.js app, configure nginx + TLS, generate a token, and hand you the env values. The server is ~250 lines of Express + multer; supports auth via password (web login) or Bearer token (this CLI).

You can also clone the reference implementation directly — DM the skill author (`@markett` on dem0nhub) for the source bundle.

## CLI usage

The `redok` script is stdlib Python only — no pip installs.

```bash
# Upload a single file → prints the full <BASE>/f/<id> URL on stdout
redok up ~/Downloads/video.mp4

# Multiple files → one URL per line
redok up file1.png file2.pdf clip.mp4

# List all files (id, name, size, age, url)
redok ls

# Delete by ID
redok rm abc12def

# Open the preview in the browser (macOS / Linux)
redok open abc12def
```

`redok up <file>` is the most common — use it whenever the user wants a share link for something on disk.

## Steps for Claude

When the user wants to share a file:

1. **Resolve the path** — expand `~`, handle relatives, verify the file exists. If they say "this video" without a path, look at recent context (latest screen recording, current dir, recently downloaded, etc).

2. **Upload** — `redok up "<path>"`. Prints the share URL on stdout.

3. **Show the user** the URL as a clickable markdown link with a one-line summary of what was uploaded.

4. **If they asked to send to someone** — chain with the right messaging skill:
   - Telegram → `telegram-sender` skill or the Telegram MCP tools
   - iMessage → the iMessage MCP tools
   - Otherwise just print the URL

## Examples

<example>
user: redok this clip ~/Movies/test.mov
assistant: [runs `redok up ~/Movies/test.mov`]
Uploaded → https://files.yourdomain.com/f/x7k2bnpq · 24 MB · video preview + download
</example>

<example>
user: send the latest screenshot to mom on imessage
assistant: [finds latest screenshot, runs `redok up <path>`, gets URL]
[sends iMessage with the URL]
Sent — https://files.yourdomain.com/f/...
</example>

<example>
user: what files do i have up
assistant: [runs `redok ls`]
[shows formatted list]
</example>

## Errors

- **`auth error — token rejected`** — token wrong/expired. Check `cat ~/.claude/skills/redok/.token` matches the server's `API_TOKEN` env var.
- **`no token at …`** — set up the token (see Setup above).
- **`network error`** — wrong `REDOK_BASE`, or the server is down. Test with `curl -I $REDOK_BASE/login`.

## HTTP API reference (for the curious)

All authed routes accept `Authorization: Bearer <API_TOKEN>` (this CLI) OR a session cookie from the web login.

- `POST /api/upload` — multipart, field `file` → `{id, url, raw, download}`
- `GET /api/files` — list as JSON array
- `DELETE /api/files/:id` — remove
- `GET /f/:id` — preview HTML (public, no auth)
- `GET /raw/:id` — raw content with range support (public)
- `GET /d/:id` — download with original filename (public)

## Files

- `redok` — the CLI (Python stdlib)
- `.token` — your API token, you create this (chmod 600). Not bundled — never commit/share.
