Agent skill

Ipfs Deployment

by ccashwell in ccashwell/evm-cortex

A skill your agent uses when deploying dApp frontends to IPFS or decentralized hosting.

MITAuto-check passedDevOps & Cloud

Install Ipfs Deployment

skills CLI
$ npx skills add ccashwell/evm-cortex --skill ipfs-deployment -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install ccashwell/evm-cortex ipfs-deployment --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/ccashwell/evm-cortex.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/ipfs-deployment .claude/skills/ipfs-deployment && rm -rf skills-src

Use ~/.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/

Facts

Skill name
ipfs-deployment
GitHub stars
131
Token cost
~1.5k tokens
SKILL.md length
289 words
Files
1
Skills in repo
89
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses when deploying dApp frontends to IPFS or decentralized hosting.

  • Works in 7 steps: Missing trailingSlash: true: Pages… → Absolute paths (/assets/...): Break on… → SSR/API routes: Don't work on IPFS… → …
  • Deploying dApp frontends to IPFS
  • SKILL.md covers Overview, Building for IPFS, Build and Clean and IPFS Pinning, plus 5 more sections
  • Calls npm, curl and npx; reaches gateway.pinata.cloud and cloudflare-ipfs.com; needs DEPLOYER_KEY and ENS_DEPLOYER_KEY

What it does

Ipfs Deployment is an agent skill from ccashwell/evm-cortex. Use when deploying dApp frontends to IPFS or decentralized hosting. Covers static builds, IPFS pinning (Pinata, Fleek), ENS content hash, trailingSlash configuration, and gateway setup.

Its SKILL.md is about 1.5k 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 DevOps & Cloud, covering Smart contracts and Deployment. It works with Next.js. The repository describes itself as: Ethereum protocol engineering squad for AI coding assistants. The licence is MIT.

When your agent uses it

  • Deploying dApp frontends to IPFS
  • Decentralized hosting

Example prompts

  • “/ipfs-deployment”

Requirements

  • Node.js
  • A credential in DEPLOYER_KEY
  • A credential in ENS_DEPLOYER_KEY

Workflow steps

7 steps, taken from the first numbered list in SKILL.md.

  1. Missing trailingSlash: true: Pages return 404 on IPFS
  2. Absolute paths (/assets/...): Break on IPFS subpath gateways
  3. SSR/API routes: Don't work on IPFS (static only)
  4. Image optimization: Next.js image optimizer needs a server
  5. Client-side routing: Works with hash router, needs trailingSlash for path router
  6. Stale cache: Always clean build before deploying
  7. Large bundles: IPFS retrieval is slower than CDN — optimize bundle size

What it can do on your machine

Read from SKILL.md and the folder at commit f8f3301. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • npm
    • curl
    • npx

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • gateway.pinata.cloud
    • cloudflare-ipfs.com
    • api.pinata.cloud

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • DEPLOYER_KEY
    • ENS_DEPLOYER_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Ipfs Deployment loads about 1.5k tokens when it runs. Until then it costs about 50 tokens; SKILL.md has 289 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~50
When it runs · the whole SKILL.md, loaded when a task matches
~1.5k

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.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated 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.

SKILL.md

The full file from ccashwell/evm-cortex at commit f8f3301, republished under its MIT licence (© ccashwell). 289 words, ~1,541 tokens.

Download SKILL.mdSave it as .claude/skills/ipfs-deployment/SKILL.md (or your agent's skills folder).
name
ipfs-deployment
description
Use when deploying dApp frontends to IPFS or decentralized hosting. Covers static builds, IPFS pinning (Pinata, Fleek), ENS content hash, trailingSlash configuration, and gateway setup.

IPFS / Decentralized Frontend Deployment

Overview

Deploying a dApp frontend to IPFS ensures censorship resistance and permanence. The frontend is served via IPFS gateways or ENS+IPFS resolution. Critical for truly decentralized protocols.

Building for IPFS

Next.js Static Export
javascript
// next.config.js
/** @type {import('next').NextConfig} */
const nextConfig = {
  output: 'export',
  trailingSlash: true,  // CRITICAL: IPFS serves directories, needs index.html in each
  images: {
    unoptimized: true,   // No image optimization server on IPFS
  },
  assetPrefix: './',     // Relative paths for IPFS gateway compatibility
};

module.exports = nextConfig;

Why trailingSlash: true is critical: IPFS resolves /about as a file, but /about/ as a directory containing index.html. Without trailing slashes, navigation breaks on IPFS gateways.

Vite Static Build
typescript
// vite.config.ts
import { defineConfig } from 'vite';

export default defineConfig({
  base: './',  // Relative paths
  build: {
    outDir: 'dist',
  },
});
Create React App
json
{
  "homepage": "."
}

Build and Clean

bash
# ALWAYS clean before building for IPFS
rm -rf out/ dist/ .next/

# Build
npm run build

# Verify the output
ls -la out/  # or dist/
# Should contain index.html and all static assets

IPFS Pinning

Pinata
bash
# Install Pinata CLI
npm install -g @pinata/cli

# Pin a directory
pinata upload ./out

# Or via API
curl -X POST "https://api.pinata.cloud/pinning/pinFileToIPFS" \
  -H "Authorization: Bearer $PINATA_JWT" \
  -F "file=@./out"
typescript
// Programmatic pinning
import PinataSDK from '@pinata/sdk';

const pinata = new PinataSDK({ pinataJWTKey: process.env.PINATA_JWT });

const result = await pinata.pinFromFS('./out', {
  pinataMetadata: { name: 'my-dapp-v1.2.0' },
  pinataOptions: { cidVersion: 1 },
});

console.log('IPFS Hash:', result.IpfsHash);
// e.g., bafybeie5gq4jxvzmsym6hjlwxej4rwdoxt7wadqvmmwbqqblsm54ceyaiq
Fleek
bash
# Install Fleek CLI
npm install -g @fleek-platform/cli

# Login
fleek login

# Deploy
fleek sites deploy --dir ./out
IPFS CLI (Direct)
bash
# Add to local IPFS node
ipfs add -r ./out --cid-version 1
# Returns CID: bafybeie5gq4jxvzmsym6hjlwxej4...

# Pin to remote pinning service
ipfs pin remote add --service=pinata bafybeie5gq4jxvzmsym6hjlwxej4...

ENS Content Hash

Link your IPFS deployment to an ENS name for myprotocol.eth resolution:

typescript
import { createWalletClient, http, namehash } from 'viem';
import { mainnet } from 'viem/chains';

const ENS_RESOLVER = '0x231b0Ee14048e9dCcD1d247744d114a4EB5E8E63';

// Set content hash to IPFS CID
const contentHash = encodeContentHash('ipfs://bafybeie5gq4jxvzmsym6hjlwxej4...');

await walletClient.writeContract({
  address: ENS_RESOLVER,
  abi: resolverAbi,
  functionName: 'setContenthash',
  args: [namehash('myprotocol.eth'), contentHash],
});

Using ethers.js:

typescript
import { ethers } from 'ethers';

const resolver = await provider.getResolver('myprotocol.eth');
const tx = await resolver.setContentHash('ipfs://bafybeie5gq4jxvzmsym6hjlwxej4...');
await tx.wait();

Access via: https://myprotocol.eth.limo (ETH.limo gateway)

Gateway Configuration

Public IPFS Gateways
GatewayURL Pattern
Cloudflarehttps://cloudflare-ipfs.com/ipfs/{cid}
dweb.linkhttps://{cid}.ipfs.dweb.link
eth.limohttps://{ens}.eth.limo (ENS resolution)
Pinatahttps://gateway.pinata.cloud/ipfs/{cid}
w3s.linkhttps://{cid}.ipfs.w3s.link
Custom Gateway (Pinata Dedicated)
bash
# Pinata dedicated gateway
https://your-gateway.mypinata.cloud/ipfs/{cid}

CI/CD Pipeline

yaml
# .github/workflows/deploy-ipfs.yml
name: Deploy to IPFS
on:
  push:
    tags: ['v*']

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-node@v4
        with:
          node-version: 20

      - run: npm ci
      - run: npm run build

      - name: Pin to Pinata
        env:
          PINATA_JWT: ${{ secrets.PINATA_JWT }}
        run: |
          CID=$(npx @pinata/cli upload ./out --json | jq -r '.IpfsHash')
          echo "Deployed to IPFS: $CID"
          echo "Gateway: https://gateway.pinata.cloud/ipfs/$CID"
          echo "CID=$CID" >> $GITHUB_ENV

      - name: Update ENS (optional)
        if: github.ref_type == 'tag'
        env:
          DEPLOYER_KEY: ${{ secrets.ENS_DEPLOYER_KEY }}
        run: |
          # Update ENS content hash via script
          node scripts/update-ens.js ${{ env.CID }}

Deployment Checklist

  • Clean build directory before building (rm -rf out/ dist/ .next/)
  • trailingSlash: true in Next.js config (required for IPFS routing)
  • output: 'export' for static generation (no SSR on IPFS)
  • Relative asset paths (./ or assetPrefix: './')
  • No server-side features (API routes, middleware, SSR)
  • Images unoptimized (images.unoptimized: true)
  • RPC URLs configured via environment or hardcoded public RPCs
  • Test locally: npx serve out and verify all routes work
  • Pin to at least 2 pinning services for redundancy
  • Update ENS content hash after pinning
  • Verify via public gateway before announcing
  • Store CID in deployment registry / release notes

Common Pitfalls

  1. Missing trailingSlash: true: Pages return 404 on IPFS
  2. Absolute paths (/assets/...): Break on IPFS subpath gateways
  3. SSR/API routes: Don't work on IPFS (static only)
  4. Image optimization: Next.js image optimizer needs a server
  5. Client-side routing: Works with hash router, needs trailingSlash for path router
  6. Stale cache: Always clean build before deploying
  7. Large bundles: IPFS retrieval is slower than CDN — optimize bundle size

© ccashwell, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/ipfs-deployment of ccashwell/evm-cortex.

Open the folder on GitHubat commit f8f3301

Compare with similar skills

Ipfs Deployment 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.

Ipfs Deployment compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Ipfs Deployment this skillccashwell/evm-cortex131—~1.5kAutomated safety check: PassMIT
Protocol Deploymentsablier-labs/evm-monorepo353—~3.8kAutomated safety check: NotesCustom licence
Convex Self Hostingwaynesutton/markdown-site628—~1.4kAutomated safety check: PassMIT
Vercel Deploymentdavila7/claude-code-templates32k5 repos~534Automated safety check: PassMIT
ClankerBankrBot/skills1.2k1 repos~3kAutomated safety check: NotesNone
Defenderquillai-network/quillshield_skills129—~1.7kAutomated safety check: NotesMIT

Similar skills

  • Protocol Deployment

    sablier-labs/evm-monorepo

    Deploy Sablier protocols to a new EVM chain. An agent skill from sablier-labs/evm-monorepo.

    353 GitHub stars~3.8k tokensUpdated today
    DevOps & CloudAuto-check: notes
  • Convex Self Hosting

    waynesutton/markdown-site

    Integrate Convex static self hosting into existing apps using the latest upstream instructions from get-convex/self-hosting every time.

    628 GitHub stars~1.4k tokensUpdated 4 mo ago
    DevOps & CloudAuto-check passed
  • Vercel Deployment

    davila7/claude-code-templates

    Expert knowledge for deploying to Vercel with Next.js Use when: vercel, deploy, deployment, hosting, production.

    32k GitHub starsUsed in 5 repos~534 tokens
    DevOps & CloudAuto-check passed
  • Clanker

    BankrBot/skills

    Deploy ERC20 tokens on Base, Ethereum, Arbitrum, and other EVM chains using the Clanker SDK.

    1.2k GitHub starsUsed in 1 repo~3k tokens
    DevOps & CloudAuto-check: notes
  • Defender

    quillai-network/quillshield_skills

    Blue-team release-gate analysis for smart contract deployment and upgrade readiness.

    129 GitHub stars~1.7k tokensUpdated 6 mo ago
    DevOps & CloudAuto-check: notes
  • Nextjs On Cloudflare

    cloudflare/skills

    Official

    Build, migrate, and deploy Next.js apps on Cloudflare Workers with vinext.

    3k GitHub starsUsed in 2 repos~678 tokens
    DevOps & CloudAuto-check passed

More from ccashwell/evm-cortex

All 89 skills in this repo
  • Xray Pre Audit

    ccashwell/evm-cortex

    A skill your agent uses when preparing for a security audit, performing reconnaissance on a new codebase, or creating a protocol overview.

    131 GitHub stars~25k tokensUpdated 8 days ago
    Auto-check passed
  • Aave Integration

    ccashwell/evm-cortex

    A skill your agent uses when integrating with Aave V3 for lending, borrowing, flash loans, or building on top of Aave markets.

    131 GitHub stars~1.3k tokensUpdated 8 days ago
    Auto-check passed
  • Access Control Patterns

    ccashwell/evm-cortex

    Access control design patterns for Solidity protocols. An agent skill from ccashwell/evm-cortex.

    131 GitHub stars~1.8k tokensUpdated 8 days ago
    Auto-check passed
  • Anvil Patterns

    ccashwell/evm-cortex

    A skill your agent uses when running a local Ethereum node with Anvil.

    131 GitHub stars~1.3k tokensUpdated 8 days ago
    Auto-check passed
  • Audit Breadth Scan

    ccashwell/evm-cortex

    A skill your agent uses when performing systematic breadth-first review of all contracts during a security audit.

    131 GitHub stars~1.4k tokensUpdated 8 days ago
    Auto-check passed
  • Audit Depth Analysis

    ccashwell/evm-cortex

    A skill your agent uses when performing deep analysis of specific findings or high-risk areas during a security audit.

    131 GitHub stars~1.6k tokensUpdated 8 days ago
    Auto-check passed

Works with

Questions about Ipfs Deployment

What does Ipfs Deployment do?

A skill your agent uses when deploying dApp frontends to IPFS or decentralized hosting. Ipfs Deployment is an agent skill from ccashwell/evm-cortex. Use when deploying dApp frontends to IPFS or decentralized hosting.

When should I use Ipfs Deployment?

Ipfs Deployment fits situations like: deploying dApp frontends to IPFS; decentralized hosting.

How do I install Ipfs Deployment in Claude Code?

Run `npx skills add ccashwell/evm-cortex --skill ipfs-deployment -a claude-code`. Or copy the skill folder (skills/ipfs-deployment in ccashwell/evm-cortex) into .claude/skills/ipfs-deployment in your project. Claude Code loads it when a task matches its description.

How do I install Ipfs Deployment in Codex?

Run `npx skills add ccashwell/evm-cortex --skill ipfs-deployment -a codex`. Or copy the skill folder (skills/ipfs-deployment in ccashwell/evm-cortex) into .agents/skills/ipfs-deployment in your project. Codex loads it when a task matches its description.

Can I use Ipfs Deployment in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add ccashwell/evm-cortex --skill ipfs-deployment -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ipfs-deployment, .gemini/skills/ipfs-deployment, .github/skills/ipfs-deployment and .opencode/skills/ipfs-deployment in your project.

What does Ipfs Deployment need to run?

Going by SKILL.md and its folder, Ipfs Deployment needs the command-line tools its instructions call (npm, curl and npx) and credentials named DEPLOYER_KEY and ENS_DEPLOYER_KEY. Our summary lists: Node.js; A credential in DEPLOYER_KEY; A credential in ENS_DEPLOYER_KEY.

Does Ipfs Deployment access the network?

SKILL.md names 3 domains. In commands or code: gateway.pinata.cloud, cloudflare-ipfs.com and api.pinata.cloud; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.

Is Ipfs Deployment safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Ipfs Deployment use?

Ipfs Deployment is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Ipfs Deployment use?

About 1.5k tokens (SKILL.md is roughly 6.2k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Ipfs Deployment?

Skills that share tags, products or a category with Ipfs Deployment: Protocol Deployment (sablier-labs/evm-monorepo, 353 stars), Convex Self Hosting (waynesutton/markdown-site, 628 stars), Vercel Deployment (davila7/claude-code-templates, 32k stars) and Clanker (BankrBot/skills, 1.2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Ipfs Deployment?

ccashwell (a GitHub user) maintains it in ccashwell/evm-cortex, which has 131 GitHub stars. The repository holds 89 skills in this directory. The repository was last updated on September 30, 2026.

Source: ccashwell/evm-cortex on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.