Add Vercel deployment capability to NanoClaw agents. Installs the Vercel CLI in agent containers and sets up OneCLI credential injection for api.vercel.com. Use when the user wants agents to deploy web applications to Vercel.
npx skills add https://github.com/nanocoai/nanoclaw --skill add-vercel
This skill gives NanoClaw agents the ability to deploy web applications to Vercel. It installs the Vercel CLI in agent containers and configures OneCLI to inject Vercel credentials automatically.
Principle: Do the work — don't tell the user to do it. Only ask for their input when it genuinely requires manual action (pasting a token).
Check if the container skill exists:
test -d container/skills/vercel-cli && echo "INSTALLED" || echo "NOT_INSTALLED"
If INSTALLED, skip to Phase 3 (Configure Credentials).
Verify OneCLI is working (required for credential injection):
onecli version 2>/dev/null && echo "ONECLI_OK" || echo "ONECLI_MISSING"
If ONECLI_MISSING, tell the user to run /init-onecli first, then retry /add-vercel. Stop here.
Copy the bundled container skill into the container skills directory:
rsync -a .claude/skills/add-vercel/container-skills/ container/skills/
Verify:
head -5 container/skills/vercel-cli/SKILL.md
onecli secrets list 2>/dev/null | grep -i vercel
If a Vercel credential already exists, skip to Phase 4.
The agent needs a Vercel personal access token. Tell the user:
> I need your Vercel personal access token. Go to https://vercel.com/account/tokens and create one with these settings:
>
> - Token name: nanoclaw (or any name you'll recognize)
> - Scope: "Full Account" — the agent needs to create projects, deploy, and manage domains
> - Expiration: "No expiration" recommended (avoids credential rotation), or pick a date if your security policy requires it
>
> After creating the token, copy it — you'll only see it once.
Once the user provides the token, add it to OneCLI:
onecli secrets create \
--name "Vercel API Token" \
--type generic \
--value "<TOKEN>" \
--host-pattern "api.vercel.com" \
--header-name "Authorization" \
--value-format "Bearer {value}"
Verify:
onecli secrets list | grep -i vercel
OneCLI uses selective secret mode — secrets must be explicitly assigned to each agent. Get the Vercel secret ID from the output above, then assign it to every agent:
# set-secrets replaces the entire list — read and merge for each agent.
VERCEL_SECRET_ID=$(onecli secrets list | jq -r '.data[] | select(.name | test("(?i)vercel")) | .id' | head -1)
for agent in $(onecli agents list | jq -r '.data[].id'); do
CURRENT=$(onecli agents secrets --id "$agent" | jq -r '[.data[]] | join(",")')
MERGED=$(printf '%s' "$CURRENT,$VERCEL_SECRET_ID" | tr ',' '\n' | sort -u | paste -sd ',' -)
onecli agents set-secrets --id "$agent" --secret-ids "$MERGED"
done
The Vercel CLI is not in the agent image by default — this skill is what adds
it. It goes in container/cli-tools.json as a json-merge rather than a
Dockerfile edit, which is what keeps the change deterministic and removable.
grep -q '"vercel"' container/cli-tools.json && echo "PRESENT" || echo "MISSING"
If MISSING, append the entry, keeping an exact pinned version — the manifest
rejects ranges, so the supply-chain policy still applies:
{ "name": "vercel", "version": "52.2.1" }
Then apply it:
./container/build.sh
On an install that builds its own image, that rebuilds it. On one that fetches a
published image, the same command adds Vercel as a single layer on top of the
image already there, so the publisher's patched components underneath are kept —
you are adding a tool, not replacing the runtime. The command says what that does
and does not cover.
If PRESENT, the CLI is already in the manifest — skip the rebuild.
The Vercel CLI is a globally-installed binary — not importable or typed — so a structural test guards the install. Copy it into the host test tree and run it:
cp .claude/skills/add-vercel/vercel-manifest.test.ts src/vercel-manifest.test.ts
pnpm exec vitest run src/vercel-manifest.test.ts
The test asserts both halves of the install: a pinned vercel entry in container/cli-tools.json, and the container skill at container/skills/vercel-cli/. Either alone is a broken install — a manifest entry with no skill leaves the agent a binary nobody told it about, and a skill with no entry tells it to run a command that is not there.
Container skills are copied once at group creation and not auto-synced. After installing or updating a container skill, sync it to all existing agent groups:
for session_dir in data/v2-sessions/ag-*; do
if [ -d "$session_dir/.claude-shared/skills" ]; then
rsync -a container/skills/ "$session_dir/.claude-shared/skills/"
echo "Synced skills to: $session_dir"
fi
done
Stop all running agent containers so they pick up the new skills on next wake:
docker ps --format "{{.ID}} {{.Names}}" | grep nanoclaw-v2 | awk '{print $1}' | xargs -r docker stop
The agent can now deploy web applications to Vercel. Key commands:
vercel deploy --yes --prod --token placeholder — deploy to productionvercel ls --token placeholder — list deploymentsvercel whoami --token placeholder — check authFor the full command reference, the agent has the vercel-cli container skill loaded automatically.
Run Python code in the cloud with serverless containers, GPUs, and autoscaling. Use when deploying ML models, running batch processing jobs, scheduling compute-intensive tasks, or serving APIs that require GPU acceleration or dynamic scaling.
Advanced GitHub Actions workflow automation with AI swarm coordination, intelligent CI/CD pipelines, and comprehensive repository management
Google Cloud Platform CLI - manage GCP resources including Compute Engine, Cloud Run, GKE, Cloud Functions, Storage, BigQuery, and more.
Expert backend architect specializing in scalable API design, microservices architecture, and distributed systems. Masters REST/GraphQL/gRPC APIs, event-driven architectures, service mesh patterns, and modern backend frameworks. Handles service boundary definition, inter-service communication, resilience patterns, and observability. Use PROACTIVELY when creating new backend services or APIs.
Run Python code in the cloud with serverless containers, GPUs, and autoscaling. Use when deploying ML models, running batch processing jobs, scheduling compute-intensive tasks, or serving APIs that require GPU acceleration or dynamic scaling.
Aspire skill covering the Aspire CLI, AppHost orchestration, service discovery, integrations, MCP server, VS Code extension, Dev Containers, GitHub Codespaces, templates, dashboard, and deployment. Use when the user asks to create, run, debug, configure, deploy, or troubleshoot an Aspire distributed application.
Audits Python + BigQuery pipelines for cost safety, idempotency, and production readiness. Returns a structured report with exact patch locations.
Microsoft Store Developer CLI (msstore) for publishing Windows applications to the Microsoft Store. Use when asked to configure Store credentials, list Store apps, check submission status, publish submissions, manage package flights, set up CI/CD for Store publishing, or integrate with Partner Center. Supports Windows App SDK/WinUI, UWP, .NET MAUI, Flutter, Electron, React Native, and PWA applications.
Take nanocoai/add-vercel from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.