Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/jcottam-host
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: frontend, devops, cloud, writing
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Shell scripts
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/host
What's inside
- Skill name
host- Description
- Upload files to Cloudflare R2 and return a shareable public URL. Supports any file type (HTML, images, PDFs, etc.) with automatic slug generation, clipboard copy, and hosting history tracking. Use when the user says "host", "host this", "host file", "publish", "publish this", "share this file", "upload to R2", "make this public", "get a shareable link", "deploy this file", "put this online", or any variation of wanting to make a file publicly accessible via URL.
- License
- MIT
- Metadata
- author: jcottam · version: 1.2.0
- Instructions
- 133 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
Files (5)
- SKILL.md
- custom-domain.md · references/
- history.sh · scripts/
- host.sh · scripts/
- setup.sh · scripts/
SKILL.md (first lines)
# Host
Upload any file to Cloudflare R2 and get back a shareable public URL.
`SCRIPTS` below refers to the `scripts/` directory next to this file.
## Prerequisites
- **Wrangler CLI** — the Cloudflare developer CLI used for all R2 operations
- **Cloudflare account** with an R2 bucket that has public access enabled (r2.dev subdomain or custom domain)
- **Wrangler authenticated** via one of:
- `wrangler login` (interactive OAuth — run once, token persists in `~/.wrangler`)
- `CLOUDFLARE_API_TOKEN` environment variable
## Step 1 — Check prerequisites
### Wrangler installation
Check if `wrangler` is available:
```bash
wrangler --version
```
If not installed, install it globally:
```bash
npm install -g wrangler
```
### Wrangler authentication
Verify auth status:
```bash
wrangler whoami
```
If not authenticated, the user must run `wrangler login` interactively (opens a browser for OAuth). This is a one-time step.
### Host configuration
Look for `~/.publish.json`. If it doesn't exist, run `$SCRIPTS/setup.sh` and walk the user through the prompts. The setup script creates the config file with:
```json
{
"bucket": "my-bucket-name",
"publicBaseUrl": "https://pub-xxx.r2.dev"
}
```
If the file exists, read it and parse the `bucket` and `publicBaseUrl` values. Both are required.
## Step 2 — Identify the asset
Determine what file to host from context:
1. If the user specified a file path, use that.
2. If the user said "host this" without a path, check for:
- A file the user is currently viewing or recently created
- A `.canvas.tsx` output or generated HTML file from the current session
3. Verify the file exists before proceeding. If ambiguous, ask the user to clarify.
## Step 3 — Generate the key
Decide the R2 object key (the path within the bucket):
- **Default**: derive a readable slug from the filename.
- Strip extension, lowercase, replace spaces and special characters with hyphens
- Append today's date: `my-report-2026-05-15`
- Re-attach the original file extension
- Example: `Sales Report Q1.html` becomes `sales-report-q1-2026-05-15.html`
- **User override**: if the user provided a custom name, use it instead (sanitized).
- **Collision check**: scan `~/.publish-history.json` for the key. If it exists, ask the user whether to overwrite or append a suffix (`-2`, `-3`, etc.).
## Step 4 — Upload
Run the host script:
```bash
$SCRIPTS/host.sh <file-path> [--key <custom-key>]
```
The script:
1. Reads `~/.publish.json` for bucket name and public URL base
2. Detects the content type from the file extension
3. Uploads via `wrangler r2 object put <bucket>/<key> --file <path> --content-type <type> --remote`
4. Constructs the public URL: `<publicBaseUrl>/<key>`
5. Copies the URL to the clipboard (`pbcopy` on macOS, `xclip`/`xsel` on Linux)
6. Appends an entry to `~/.publish-history.json`
7. Outputs JSON with `url`, `key`, `contentType`, `size`, and `publishedAt`
**Important:** The `--remote` flag is required. Without it, Wrangler uploads to a local R2 simulator instead of the actual Cloudflare R2 bucket.
If the script exits non-zero, report the error to the user. Common issues:
- **Wrangler not installed**: suggest `npm install -g wrangler`
- **Not authenticated**: suggest running `wrangler login`
- **Bucket not found**: confirm the bucket name in `~/.publish.json` and that public access is enabled
- **File not found**: re-check the file path
## Step 5 — Report
After a successful upload:
1. Print the public URL prominently.
2. Confirm the URL was copied to the clipboard.
3. Mention the entry was added to history.
Example output:
```
Hosted: https://pub-xxx.r2.dev/sales-report-q1-2026-05-15.html
Copied to clipboard.
```
## History
Use `$SCRIPTS/history.sh` to interact with the local hosting history at `~/.publish-history.json`.From jcottam/agent-resources, MIT.
More from jcottam/agent-resources
- 0.652score
ship
jcottam
Validate a branch, run quality gates, update documentation and changelog, and open a pull request.
SkillAFreshness: A★ 25Claude Code +9 - 0.647score
writing-tickets
jcottam
Write or rewrite an issue tracker ticket (Linear, GitHub Issues, Jira, or similar) that a person or coding agent will pick up.
SkillAFreshness: A★ 25Claude Code +9 - 0.647score
new-project
jcottam
Kickstart a new project by interviewing for context, choosing Astro or Next.js and extras, then scaffolding a barebones app on Vercel with Tailwind, base…
SkillAFreshness: A★ 25Claude Code +9 - 0.608score
promote-skill
jcottam
Move a tested personal agent skill into a shared skills repository, check for overlap, normalize metadata, update the catalog and release files, validate the…
SkillBFreshness: B★ 25Claude Code +9 - 0.608score
release-notes
jcottam
Summarize a logical grouping of git commits into plain-language release notes for non-technical readers.
SkillBFreshness: B★ 25Claude Code +9 - 0.603score
sounding-board
jcottam
Restate my idea in your own words so I can hear it fresh, then flag anything that sounds fuzzy, contradictory, or underspecified.
SkillBFreshness: B★ 25Claude Code +9 - 0.583score
squash-branch
jcottam
Review commits in a branch, date range, or recent history; group related work into a clean linear history; and verify that the final tree is unchanged.
SkillBFreshness: B★ 25Claude Code +9 - 0.557score
orient
jcottam
Orient a developer to an unfamiliar codebase by systematically exploring its structure, purpose, features, conventions, and workflows.
SkillCFreshness: C★ 25Claude Code +9 - 0.557score
content-wireframe
jcottam
Draft a content wireframe for a website or page before any design or code.
SkillCFreshness: C★ 25Claude Code +9 - 0.557score
review-pr
jcottam
Forensic, stage-aware pull request review.
SkillCFreshness: C★ 25Claude Code +9 - 0.557score
advisor
jcottam
Activate rigorous, no-nonsense advisory mode for deep analysis, research, critical review, or honest assessment.
SkillCFreshness: C★ 25Claude Code +9
Signals
- Stars
- 25
- Forks
- 1
- Open issues
- 0
- Last commit (this folder)
- May 16, 2026 (5 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- Version
- 1.2.0
- License
- MIT
- Repository
- github.com/jcottam/agent-resources
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from jcottam
- 0.652score
ship
jcottam
Validate a branch, run quality gates, update documentation and changelog, and open a pull request.
SkillAFreshness: A★ 25Claude Code +9 - 0.647score
writing-tickets
jcottam
Write or rewrite an issue tracker ticket (Linear, GitHub Issues, Jira, or similar) that a person or coding agent will pick up.
SkillAFreshness: A★ 25Claude Code +9 - 0.647score
new-project
jcottam
Kickstart a new project by interviewing for context, choosing Astro or Next.js and extras, then scaffolding a barebones app on Vercel with Tailwind, base…
SkillAFreshness: A★ 25Claude Code +9 - 0.608score
promote-skill
jcottam
Move a tested personal agent skill into a shared skills repository, check for overlap, normalize metadata, update the catalog and release files, validate the…
SkillBFreshness: B★ 25Claude Code +9 - 0.608score
release-notes
jcottam
Summarize a logical grouping of git commits into plain-language release notes for non-technical readers.
SkillBFreshness: B★ 25Claude Code +9 - 0.603score
sounding-board
jcottam
Restate my idea in your own words so I can hear it fresh, then flag anything that sounds fuzzy, contradictory, or underspecified.
SkillBFreshness: B★ 25Claude Code +9
Cite this page
host skill. Agent Mart. https://agentmart.dev/skills/jcottam-host (last updated 2026-10-24)