briefcast

Docs

briefcast is tiny private hosting for files your AI agent generates — markdown or HTML. Upload a file, get a stable URL, share it. This page covers what's installed after npx briefcast init, how to call the API directly, and what the platform's defaults and limits are.

Install

In any git repo:

That writes .claude/skills/briefcast/SKILL.md so Claude Code in this repo gains a /briefcast skill. It then asks once whether you want to set a shared upload password for the team. If you say yes, it writes .briefcast to the repo root with default_password=<your-password>. Commit .briefcast so coworkers share the same default.

To install globally (skip the per-repo password prompt):

To accept all defaults non-interactively:

The /briefcast skill

After init, in any Claude Code session in this repo:

/briefcast README.md
/briefcast docs/architecture.md --ttl=7
/briefcast plan.html --no-password

The skill returns the URL and (unless you used --no-password) the password. Share both with the recipient.

Password resolution order, highest priority first:

  1. --password="..." flag on the invocation
  2. --no-password (skip the password gate entirely; private-by-obscurity only)
  3. default_password=... in <repo-root>/.briefcast
  4. A randomly chosen fun phrase (e.g. "blue elephant lawyer") as a one-off fallback

--ttl=<days> overrides the 30-day default. Range: 1–365.

API reference

The upload, delete, and health endpoints are open — no API key. Security comes from the password gate and the non-guessable 10-character slug.

POST /api/upload

Body fields:

Response:

{
  "url": "https://briefcast-seven.vercel.app/b/abc123xyz",
  "slug": "abc123xyz",
  "deleteToken": "<32-char alphanumeric>",
  "expiresAt": 1750000000000,
  "ttlDays": 30
}

Limit: 8 MB per file.

POST /api/delete

The delete token (returned at upload time) IS the auth — no bearer needed. Save it if you ever want to delete or replace the brief.

GET /api/health

Liveness probe. Returns 200.

Defaults & limits

Troubleshooting

HTTP 413 on upload. Your file is over 8 MB. Split it or compress it.

HTTP 400 with invalid_content_type. Only html or markdown are accepted. Other types are rejected.

HTTP 400 with missing_content. The body is empty or missing.

Password mismatch on view. The password gate is set per-brief at upload time. If you forgot the password, you can't recover it — re-upload with a new one (or share via --no-password).

Lost the delete token. There's no recovery. The brief will be deleted automatically at TTL expiry.

TTL expired. The brief is gone. Re-upload from the source file. The slug will be different (replace flow is on the roadmap as #6).