Static Deploy
nexu-io/nexu
Deploy static pages to nexu.space. An agent skill from nexu-io/nexu.
A skill your agent uses when the user mentions "pinme", or needs to upload files, store to IPFS, create/publish/deploy websites or full-stack services (including frontend pages, backend APIs…
$ npx skills add glitternetwork/pinme --skill pinme -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install glitternetwork/pinme pinme --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/glitternetwork/pinme.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/pinme .claude/skills/pinme && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "pinme" agent skill from https://github.com/glitternetwork/pinme/tree/main/skills/pinme into .claude/skills/pinme/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pinme", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/glitternetwork/pinme/tree/main/skills/pinmeType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add glitternetwork/pinme --skill pinme -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install glitternetwork/pinme pinme --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/glitternetwork/pinme.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/pinme .agents/skills/pinme && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "pinme" agent skill from https://github.com/glitternetwork/pinme/tree/main/skills/pinme into .agents/skills/pinme/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pinme", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add glitternetwork/pinme --skill pinme -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install glitternetwork/pinme pinme --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/glitternetwork/pinme.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/pinme .cursor/skills/pinme && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "pinme" agent skill from https://github.com/glitternetwork/pinme/tree/main/skills/pinme into .cursor/skills/pinme/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pinme", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/glitternetwork/pinme.git --path skills/pinme--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add glitternetwork/pinme --skill pinme -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install glitternetwork/pinme pinme --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/glitternetwork/pinme.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/pinme .gemini/skills/pinme && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "pinme" agent skill from https://github.com/glitternetwork/pinme/tree/main/skills/pinme into .gemini/skills/pinme/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pinme", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install glitternetwork/pinme pinmeInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add glitternetwork/pinme --skill pinme -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/glitternetwork/pinme.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/pinme .github/skills/pinme && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "pinme" agent skill from https://github.com/glitternetwork/pinme/tree/main/skills/pinme into .github/skills/pinme/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pinme", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add glitternetwork/pinme --skill pinme -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install glitternetwork/pinme pinme --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/glitternetwork/pinme.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/pinme .opencode/skills/pinme && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "pinme" agent skill from https://github.com/glitternetwork/pinme/tree/main/skills/pinme into .opencode/skills/pinme/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pinme", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
pinmeA skill your agent uses when the user mentions "pinme", or needs to upload files, store to IPFS, create/publish/deploy websites or full-stack services (including frontend pages, backend APIs…
Pinme is an agent skill from glitternetwork/pinme. Use this skill when the user mentions "pinme", or needs to upload files, store to IPFS, create/publish/deploy websites or full-stack services (including frontend pages, backend APIs, database storage, email sending, etc.), or any feature requiring backend database/server support.
Its SKILL.md is about 3.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Frontend & Design, covering Transactional email, Deployment and Static sites and blogs. It works with React, Vite and Cloudflare Workers. The repository describes itself as: Deploy Your Frontend in a Single Command. Claude Code Skills supported. The licence is MIT.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 7822b05. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
npmFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
pinme.cloudpinme.eth.limoFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
API_KEYJWT_SECRETADMIN_PASSWORDFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Pinme loads about 3.8k tokens when it runs. Until then it costs about 72 tokens; SKILL.md has 892 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
- `node_modules/`, `.env`, `.git/`, `src/`│ ├── .env # Auto-generated: VITE_API_URL (do not modify), `backend/wrangler.toml`, and `frontend/.env` are generated by PinMe. Do not edit them manually by default. If extra ruAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from glitternetwork/pinme at commit 7822b05, republished under its MIT licence (© glitternetwork). 892 words, ~3,798 tokens.
.claude/skills/pinme/SKILL.md (or your agent's skills folder).Zero-config deployment tool: upload static files to IPFS, or create and deploy full-stack web projects (React+Vite + Cloudflare Worker + D1 database). Workers also support sending emails via the PinMe platform API.
digraph pinme_decision {
"User Request" [shape=doublecircle];
"Needs backend API or database?" [shape=diamond];
"Upload Files (Path 1)" [shape=box];
"Full-Stack Project (Path 2)" [shape=box];
"User Request" -> "Needs backend API or database?";
"Needs backend API or database?" -> "Upload Files (Path 1)" [label="No"];
"Needs backend API or database?" -> "Full-Stack Project (Path 2)" [label="Yes"];
}Login required. Use
pinme loginorpinme set-appkey <AppKey>beforepinme uploadorpinme import.
digraph upload_flow {
"Install/update pinme to latest" [shape=box];
"Authenticate" [shape=box];
"Determine build artifacts" [shape=box];
"pinme upload <path>" [shape=box];
"Return preview URL" [shape=doublecircle];
"Install/update pinme to latest" -> "Authenticate";
"Authenticate" -> "Determine build artifacts";
"Determine build artifacts" -> "pinme upload <path>";
"pinme upload <path>" -> "Return preview URL";
}1. Check installation and update to latest:
LOCAL=$(pinme --version 2>/dev/null || echo "0.0.0")
LATEST=$(npm view pinme version)
[ "$LOCAL" != "$LATEST" ] && npm install -g pinme@latest || echo "pinme is up to date ($LOCAL)"2. Authenticate:
pinme login
# or: pinme set-appkey <AppKey>3. Determine upload target (priority order):
dist/ — Vite / Vue / Reactbuild/ — Create React Appout/ — Next.js static exportpublic/ — Plain static files4. Upload:
pinme upload <path>
pinme upload ./dist --domain my-site # Optional: bind subdomain (wallet balance required)5. Return the final URL printed by PinMe to the user. URL priority is: DNS domain > PinMe subdomain > short URL > preview URL. If it falls back to preview, return the full URL including all hash characters — do not truncate.
pinme upload ./document.pdf # Single file
pinme upload ./my-folder # Folder
pinme upload dist # Vite/Vue build artifacts
pinme upload build # CRA build artifacts
pinme upload out # Next.js static export
pinme upload ./dist --domain my-site # Bind PinMe subdomain (wallet balance required)
pinme import ./my-archive.car # Import CAR filenode_modules/, .env, .git/, src/Login required. Uses React+Vite frontend + Cloudflare Worker backend + D1 SQLite database. When designing frontend projects, use Ant Design as the primary design reference, and prioritize following its conventions for layout, components, spacing, and interaction patterns.
digraph fullstack_flow {
"Install/update pinme to latest" [shape=box];
"pinme login" [shape=box];
"pinme create <name>" [shape=box];
"Modify template code" [shape=box];
"pinme save" [shape=box];
"Return preview URL" [shape=doublecircle];
"Install/update pinme to latest" -> "pinme login";
"pinme login" -> "pinme create <name>";
"pinme create <name>" -> "Modify template code";
"Modify template code" -> "pinme save";
"pinme save" -> "Return preview URL";
}| Layer | Tech Stack | Deploy Target |
|---|---|---|
| Frontend | React + Vite (frontend/) | IPFS |
| Backend | Cloudflare Worker (backend/src/worker.ts) | {name}.pinme.pro |
| Database | D1 SQLite (db/*.sql) | Cloudflare D1 |
| Object storage | R2 (env.R2) | Cloudflare R2 |
pinme-r2 skill. PinMe injects the project bucket as env.R2; do not replace it with D1 BLOBs or Worker filesystem state.pinme login # Login (only needed once)
pinme create <dirName> # Clone template and create project (auto-fills API URL)
pinme save # First deploy / full update (frontend + backend + database, single command)
pinme update-worker # Update backend only (when only backend/src/worker.ts was modified)
pinme update-web # Update frontend only (when only frontend/src/ was modified)
pinme update-db # Run SQL migrations only (when only db/ was modified)
pinme savedeploys frontend + backend + database all at once. Only usepinme update-*when you're certain only one part was modified.
{project}/
├── pinme.toml # Root config (auto-generated, do not modify)
├── package.json # Monorepo root (workspaces: frontend + backend)
├── backend/
│ ├── wrangler.toml # Worker config (auto-generated, do not modify)
│ ├── package.json
│ └── src/
│ └── worker.ts # Backend entry — primarily used for JSON APIs in this template
├── db/
│ └── 001_init.sql # SQL table definitions
├── frontend/
│ ├── package.json
│ ├── vite.config.ts # Dev proxy: /api → localhost:8787
│ ├── index.html
│ ├── .env # Auto-generated: VITE_API_URL (do not modify)
│ └── src/
│ ├── main.tsx
│ ├── App.tsx
│ ├── utils/
│ │ ├── api.ts # export const API = import.meta.env.VITE_WORKER_URL || ''
│ │ └── config.ts # Auto-generated: public_client_config (only when auth is enabled)
│ └── pages/
│ └── Home/
│ └── index.tsx
└── .gitignoreLOCAL=$(pinme --version 2>/dev/null || echo "0.0.0")
LATEST=$(npm view pinme version)
[ "$LOCAL" != "$LATEST" ] && npm install -g pinme@latest
pinme login
pinme create my-app
cd my-apppinme create generates a working Hello World template (includes frontend page + backend API routes + database schema). Modify the template to match the user's business logic — do not write from scratch:
backend/src/worker.ts — replace API routesfrontend/src/pages/ — replace page componentsdb/001_init.sql — replace table definitionspinme save
# Single command deploys frontend + backend + database
# Outputs preview URL: https://pinme.eth.limo/#/preview/{CID}Return the preview URL to the user. Note: return the full URL including all hash characters — do not truncate.
The backend Worker is deployed at https://{name}.pinme.pro. Frontend API requests are automatically configured to point to that address — no manual setup needed.
| Changes | Command | Notes |
|---|---|---|
Backend only (backend/src/worker.ts) | pinme update-worker | Faster |
Frontend only (frontend/src/) | pinme update-web | Generates new CID |
Database only (db/) | pinme update-db | Runs new migrations |
| Multiple changes or uncertain | pinme save | Safe full deployment |
Each frontend deployment generates a new CID and preview URL. Old URLs remain accessible.
backend/src/worker.ts)In this template, the Worker backend is primarily used for JSON APIs. Prefer standard Web APIs and simple manual routing by default. Worker-compatible libraries can be added when needed, but the default template does not rely on extra frameworks. Avoid packages that depend on a full Node.js runtime, a persistent local filesystem, native binaries, or child processes.
export interface Env {
DB: D1Database; // When using database
R2: R2Bucket; // Project object storage; injected by PinMe
API_KEY?: string; // When using email sending
JWT_SECRET: string; // When using JWT auth
ADMIN_PASSWORD: string; // When using password auth
}
const CORS_HEADERS = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
'Access-Control-Allow-Headers': 'Content-Type, Authorization, X-API-Key',
};
function json(data: unknown, status = 200): Response {
return Response.json(data, { status, headers: CORS_HEADERS });
}
export default {
async fetch(request: Request, env: Env): Promise<Response> {
const { pathname } = new URL(request.url);
const method = request.method;
if (method === 'OPTIONS') return new Response(null, { status: 204, headers: CORS_HEADERS });
try {
if (pathname === '/api/items' && method === 'GET') return handleGetItems(env);
if (pathname === '/api/items' && method === 'POST') return handleCreateItem(request, env);
return json({ error: 'Not found' }, 404);
} catch {
return json({ error: 'Internal server error' }, 500);
}
},
};| Item | Notes |
|---|---|
| Dependency choice | Prefer standard Web APIs and simple manual routing by default. If extra dependencies are needed, prefer Worker-compatible libraries. |
| Node.js capability | Workers now support part of Node.js compatibility, but they are not a full Node.js runtime. Do not assume all Node.js built-in modules are available or behave exactly the same. |
| Filesystem | Do not treat a Worker like a server with a persistent local disk. Even if some fs capabilities are available, do not rely on persistence across requests. |
| Response types | This template mainly uses the Worker for JSON APIs. If there is a clear need, it can also be adapted to return HTML or other content. |
| Password storage | Never store passwords in plaintext. Use a dedicated password hashing algorithm such as bcrypt, scrypt, or Argon2. |
| SQL | Do not build SQL by string concatenation. Use parameterized queries such as .bind(). |
When the backend needs email sending, use the PinMe platform API (https://pinme.cloud/api/v4/send_email).
1. Configure API_KEY
Add to the Env interface:
export interface Env {
DB: D1Database;
API_KEY?: string; // Required for email sending
}2. Email Handler Code
async function handleSendEmail(request: Request, env: Env): Promise<Response> {
const apiKey = env.API_KEY;
if (!apiKey) {
return json({ error: 'API_KEY not configured' }, 500);
}
const body = await request.json() as {
to?: string;
subject?: string;
html?: string;
};
if (!body.to) return json({ error: 'Email address is required' }, 400);
if (!body.subject) return json({ error: 'Subject is required' }, 400);
if (!body.html) return json({ error: 'HTML content is required' }, 400);
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (!emailRegex.test(body.to)) {
return json({ error: 'Invalid email address' }, 400);
}
const response = await fetch('https://pinme.cloud/api/v4/send_email', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': apiKey,
},
body: JSON.stringify({
to: body.to,
subject: body.subject,
html: body.html,
}),
});
const result = await response.json();
return json(result);
}// Development: Vite proxies /api to localhost:8787
// Production: VITE_API_URL is auto-injected by pinme create
export const API = import.meta.env.VITE_API_URL || '';
export function getApiUrl(path: string): string {
return API ? `${API}${path}` : path;
}// Query multiple rows
const { results } = await env.DB.prepare('SELECT * FROM t WHERE x = ?').bind(val).all();
// Query single row (returns null if not found)
const row = await env.DB.prepare('SELECT * FROM t WHERE id = ?').bind(id).first();
// Insert and return new row
const row = await env.DB.prepare('INSERT INTO t (a, b) VALUES (?, ?) RETURNING *').bind(a, b).first();
// Update
await env.DB.prepare('UPDATE t SET a = ? WHERE id = ?').bind(val, id).run();
// Delete (check if affected)
const { meta } = await env.DB.prepare('DELETE FROM t WHERE id = ?').bind(id).run();
if (meta.changes === 0) return json({ error: 'Not found' }, 404);Format: db/NNN_description.sql (for example, 001_init.sql). Files are executed in filename order.
SQLite Type Constraints:
| Do Not Use | Alternative |
|---|---|
BOOLEAN | INTEGER (0 = false, 1 = true) |
DATETIME / TIMESTAMP | TEXT, stored as ISO 8601 (default: datetime('now')) |
JSON type | TEXT, using JSON.stringify() / JSON.parse() |
VARCHAR(n) | TEXT |
| Scenario | Default Suggestion |
|---|---|
| File storage (images, attachments, media) | Use the project R2 binding through env.R2; use the pinme-r2 skill for secure routes and metadata patterns |
| Real-time communication | This template defaults to regular HTTP APIs. If there is no clear real-time requirement, start with polling |
| Multiple Workers | This template defaults to combining functionality into a single Worker and separating routes by prefix |
| Multiple databases | This template defaults to combining data into one D1 database and only splitting when isolation is truly needed |
pinme.toml, backend/wrangler.toml, and frontend/.env are generated by PinMe. Do not edit them manually by default. If extra runtime configuration is truly needed, prefer doing it through PinMe-supported mechanisms.VITE_API_URL environment variable. Do not hardcode it.| Error | Solution |
|---|---|
command not found: pinme | npm install -g pinme |
No such file or directory | Verify that the path exists |
Permission denied | Check file or directory permissions |
| Upload failed | Check the network connection and retry |
| Not logged in | Run pinme login first |
pinme list / pinme ls -l 5 # View upload history
pinme list -c # Clear upload history
pinme rm <hash> # Delete uploaded content
pinme bind <path> --domain <domain> # Bind domain (VIP + AppKey required)
pinme export <CID> # Export as CAR file
pinme set-appkey # Set/view AppKey
pinme my-domains # List bound domains
pinme delete <project> # Delete project (Worker + domain + D1)
pinme logout # Log out© glitternetwork, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/pinme of glitternetwork/pinme.
Open the folder on GitHubat commit 7822b05
Pinme next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Pinme this skillglitternetwork/pinme | 3.7k | — | ~3.8k | Automated safety check: Notes | MIT | |
| Static Deploynexu-io/nexu | 3.3k | — | ~989 | Automated safety check: Pass | MIT | |
| Using Docs Kitlobehub/lobe-ui | 2.2k | — | ~2.8k | Automated safety check: Pass | MIT | |
| Launch With AWSaws/agent-toolkit-for-aws | 2.8k | — | ~3.2k | Automated safety check: Pass | Apache-2.0 | |
| Deploy Frontendbutterbase-ai/butterbase-skills | 534 | — | ~2.8k | Automated safety check: Pass | MIT | |
| Cloudflare Workers Frameworkssecondsky/claude-skills | 227 | — | ~1.4k | Automated safety check: Pass | MIT |
nexu-io/nexu
Deploy static pages to nexu.space. An agent skill from nexu-io/nexu.
lobehub/lobe-ui
Set up and author a documentation site with @lobehub/docs-kit (the lobedocs CLI, React Router + Vite static docs used by ui.lobehub.com).
aws/agent-toolkit-for-aws
Migrates vibe-coded web applications to AWS. An agent skill from aws/agent-toolkit-for-aws.
butterbase-ai/butterbase-skills
A skill your agent uses when deploying a frontend (React, Next.js, or static HTML) to a live URL on Butterbase, or when troubleshooting deployment issues like MIME type errors or blank pages
secondsky/claude-skills
Framework integration for Cloudflare Workers. An agent skill from secondsky/claude-skills.
lobehub/lobe-ui
Local browser verification for the lobe-ui component library and documentation site.
glitternetwork/pinme
A skill your agent uses when a PinMe project (Worker TypeScript) needs to call OpenRouter-backed LLM APIs, including models, chat/completions, streaming, or OpenRouter web search.
glitternetwork/pinme
A skill your agent uses when a PinMe project (Worker TypeScript) needs to integrate user authentication — creating email/password users, verifying idtokens, querying user info, or listing users via…
glitternetwork/pinme
A skill your agent uses when a PinMe project (Worker TypeScript) needs to integrate email sending (sendemail).
glitternetwork/pinme
A skill your agent uses when a PinMe Cloudflare Worker needs R2 object storage, including secure file or image upload, streaming download, metadata lookup, deletion, listing, Range requests, or…
glitternetwork/pinme
A skill your agent uses when generating, modifying, or reviewing PinMe Worker (Cloudflare Worker TypeScript) code that accepts payments through UniwebPay — payment links, products/prices, checkout…
glitternetwork/pinme
A skill your agent uses when the user wants to share, publish, or upload a static result through PinMe, especially by generating a static HTML share page for a PinMe project link, deployed…
Works with
Categories
A skill your agent uses when the user mentions "pinme", or needs to upload files, store to IPFS, create/publish/deploy websites or full-stack services (including frontend pages, backend APIs…. Pinme is an agent skill from glitternetwork/pinme.), or any feature requiring backend database/server support.
Pinme fits situations like: the user mentions pinme; needs to upload files; create/publish/deploy websites; full-stack services (including frontend pages.
Run `npx skills add glitternetwork/pinme --skill pinme -a claude-code`. Or copy the skill folder (skills/pinme in glitternetwork/pinme) into .claude/skills/pinme in your project. Claude Code loads it when a task matches its description.
Run `npx skills add glitternetwork/pinme --skill pinme -a codex`. Or copy the skill folder (skills/pinme in glitternetwork/pinme) into .agents/skills/pinme in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add glitternetwork/pinme --skill pinme -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pinme, .gemini/skills/pinme, .github/skills/pinme and .opencode/skills/pinme in your project.
Going by SKILL.md and its folder, Pinme needs the command-line tools its instructions call (npm) and credentials named API_KEY, JWT_SECRET and ADMIN_PASSWORD. Our summary lists: Node.js; A credential in API_KEY; A credential in JWT_SECRET.
SKILL.md names 2 domains. In commands or code: pinme.cloud and pinme.eth.limo; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Pinme is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.8k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Pinme: Static Deploy (nexu-io/nexu, 3.3k stars), Using Docs Kit (lobehub/lobe-ui, 2.2k stars), Launch With AWS (aws/agent-toolkit-for-aws, 2.8k stars) and Deploy Frontend (butterbase-ai/butterbase-skills, 534 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
glitternetwork (a GitHub organization) maintains it in glitternetwork/pinme, which has 3,746 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on September 12, 2026.
Source: glitternetwork/pinme on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.