Vc release
Skill vetcoders/vibecrafted/vibecrafted-core/vibecrafted_core/skills/vc-release
Final outward ship skill. Turns "done in the repo" into "safe, visible, deployable, discoverable, and launchable in the world." Covers release mechanics, deployment topology, reverse-proxy defaults, Semgrep-gated security hygiene, domain and DNS wiring, SEO/indexability, verification challenges, onboarding truth, and post-release smoke checks. Trigger phrases: "release", "ship to market", "publish", "deploy to production", "vc-release", "go live", "launch", "wypuść wersję", "deploy", "release prep", "launch path", "launch checklist", "production checklist".From its SKILL.md
npx -y skills add vetcoders/vibecrafted --skill vc-releaseAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
15.8 KB, ~3.4k tokens by cl100k_base, as published. Nobody here has run it
Invocation for
vc-release(launcherrelease)Same three-path shape as the fleet, with this skill's literals — see the canonical Delegation Matrix:
Path Literal for this skill 1. User-launched worker vibecrafted release <agent>2. Interactive /vc-release— execute in this session; use native subagents when required; do not externalize merely because a launcher exists3. Agent-operator may dispatch the worker form above via vc-dispatch/ operator lines while preserving this skill's identity
<!-- /fleet-imperative -->Freer native on some runs ≠ abandon external fleet.
vc-dispatchandvc-shipkeep their own identities.
vc-release — Ship It Without Lying
"Done in the repo" is not "done in the world."
Operator Entry
Living Tree / Worktree Rule
This workflow runs in the operator's current checkout and current branch. Do not create, switch to, or move execution into a git worktree unless the operator explicitly asks for a worktree in this prompt. Generic words like "isolate", "parallel", or "clean branch" are not enough. Re-read files before editing, adapt to concurrent changes, and report a substrate failure if the current tree is too poisoned to continue safely.
See Living Tree Rule.
Canonical Orientation Gate
Before this workflow performs repo-specific analysis, planning, implementation, review, release, or delegation, it MUST run or consume the vc-init procedure for the assigned repo. If fresh vc-init evidence is absent, perform the init pass first and treat workflow-specific work as blocked until repo truth exists.
Loctree:loctree is the default structural perception skill for that pass. Use Loctree before grep or docs-driven claims to produce or refresh the Code-Derived Application Map: repo-view, focus, slice, impact, find, and follow as relevant. Search for existing symbols and contracts before creating new ones; run impact before delete or major refactor; run slice before editing.
The point is to find the hooks: load-bearing hubs, twins, dead code, drift, runtime entrypoints, and blast-radius traps. If the task is explicitly non-repo or no-code, state the no-repo exception in the report. Otherwise, missing vc-init/Loctree evidence is a process failure.
Enter via vibecrafted start (or vc-start). Then launch through the command deck:
vibecrafted release codex --prompt 'Prepare v1.2.1 release'
vc-release claude --prompt 'Ship the web surface safely behind Caddy'
vibecrafted release gemini --file /path/to/release-checklist.md
Prefer --file for an existing plan, --prompt for inline intent.
Release is not ceremony. Release is an operational, security, visibility, and adoption contract.
Repository Work Doctrine
For repository work, start with Loctree as the map: use loct context,
loct occurrences, loct body, and loct find --literal before broad manual
search. Use AICX for intent and session context. Use rg/grep as fallback or
local magnifier, not as a replacement for structural mapping. If Loctree fails
or misses a surface, append feedback to ~/.vibecrafted/loctree/loctree-fail.md.
Pipeline Position
scaffold → init → workflow → followup → marbles → dou → decorate → hydrate → [RELEASE]
Release runs after vc-dou verifies the product surface, vc-decorate ensures visual coherence, and vc-hydrate packages distribution/SEO/onboarding. Release makes hydrated artifacts real: tags, changelogs, registry/binary publication, deployment topology, proxy/TLS, domain/DNS/verification, indexability, security gates, post-release smoke.
Core Rule
If the release canon below is not satisfied, release is a no-op. Do not confuse "I can deploy it" with "it is safe, visible, and ready to meet strangers."
The Release Canon — six planes
- Artifact truth — versions, tags, changelog, published outputs
- Deployment truth — topology, proxying, healthchecks, restart behavior
- Security truth — Semgrep, exposed surfaces, headers, auth, secret handling
- Domain truth — DNS, default host, TLS, redirects, verification challenges
- Visibility truth — SEO, indexability, social cards, sitemap, robots, public metadata
- Onboarding truth — install path, first run, docs, screenshots, quickstart, buyer path
If any plane is missing, call it out explicitly and block release unless the user knowingly accepts the risk.
Artifact Canon
Git/versioning: tag exact commit (git tag -a v1.2.3 -m "Release 1.2.3"), push (git push origin v1.2.3), mandatory changelog, published version matches repo/badges/docs/website refs.
Published outputs: npm (npm publish after version bump), crates.io (cargo publish), PyPI (wheel + sdist), GitHub Release (attach exact artifacts with boring descriptive filenames), Docker (tag exact version, optionally latest — never ship latest alone as identity).
Artifact naming: myapp-v1.2.3-linux-x86_64.tar.gz (good) vs release.zip (bad).
Deployment Topology
Pick one intentionally:
- Caddy — solo/small team, few simple upstreams, automatic HTTPS. Default for MVP web apps, landing+app proxy.
- Nginx — already operating it confidently, advanced reverse-proxy needs, many upstreams. For established ops stacks, larger web/API estates.
- Docker — reproducibility, heterogeneous environments, portable preview/staging/prod.
Safe ladder: simplest real launch → static hosting or Caddy. App + worker + db → Docker + reverse proxy. Mature infra → Nginx or platform standard. Choose the smallest honest stack, not what sounds impressive.
Deployment Safety Defaults
- Bind app services to
127.0.0.1by default; document every0.0.0.0exception - Terminate TLS at a deliberate proxy/ingress; prefer reverse proxy over raw port exposure
- Internal Docker network over host-published ports for private services
- Environment injection at runtime, never secrets baked into images
- Require
/healthendpoint, graceful shutdown, non-root containers,.dockerignorewith no secrets
Red flags: admin/debug panel bound publicly; public service on :3000/:5173/:8000 without proxy/TLS; CORS * on authenticated APIs; stacktraces or framework banners exposed; .env or backup files web-accessible.
Reverse Proxy and Exposure
Minimum reverse-proxy expectations:
Hostand forwarding headers preserved intentionally- websocket upgrade support if the app needs it
- sane timeout and body-size settings
- redirect
www/apex according to canonical decision - 80 -> 443 redirect when public HTTPS is intended
Public internet exposure is a decision, not a default.
Semgrep Release Gate
Semgrep is part of the canon. Not optional. Release report must carry the evidence.
Canonical command: make semgrep (wired same as local pre-commit/pre-push hooks: semgrep scan --config auto --error --quiet --exclude-rule html.security.audit.missing-integrity.missing-integrity .). Hooks live in scripts/hooks/, activated through make init-hooks.
Before release: run make semgrep against full repo, record findings (rule id, severity, file, line range), classify by dataflow boundary (not file location):
- tainted-path / LFI sinks → fix at validated root object
- ReDoS-prone regex → bounded parsing or safe shape
- header/object merge unsafety → explicit allowlist + immutable input boundary
- command/shell construction → parameterized invocation, never string concatenation across an untrusted seam
Block release on any unresolved blocking finding unless user explicitly accepts risk in writing inside the report.
Minimum classes: auth/authz bypasses, insecure secret handling, shell/command injection, SSRF, path traversal/LFI, unsafe file serving, weak input validation on dangerous sinks, insecure deserialization/eval-like, ReDoS regexes, unsafe header/object merge, framework debug/dev endpoints left enabled.
If Semgrep unavailable, say so explicitly, run uvx semgrep (documented fallback), and record in the report that the gate was not satisfied. Silence is not acceptable.
Release Report Contract
Every release report must include these mandatory sections and link back to
references/release-report-template.md:
- Security gate —
make semgrepevidence, findings, and unresolved risk. - Exposed surface inventory — public routes, services, ports, domains, and admin/debug surfaces.
- Deployment mode decision — selected topology, proxy/TLS posture, and rollback path.
- Post-release install smoke — cold-path install/run verification from the published artifact.
Domain, DNS, Verification
If the product has any public surface, verify: domain registered and intended, DNS to correct target, canonical host (
www vs apex), redirects match canonical, TLS resolves cleanly, staging vs prod domains not confused. Also: no stale
preview domains advertised as primary, no mismatched favicon/title/og:image leaking old identity, no broken
/.well-known/* paths.
Ownership proofs (when public products need them): Search Console, Bing Webmaster, domain TXT/challenge files, Apple/Google ecosystem .well-known/ endpoints, any challenge-response proofs required by infra/platforms. If domain ownership proof is required and the challenge path is missing, release is not done.
SEO and Visibility Canon
Visibility is a hard checklist, not nice-to-have.
- Page-level: descriptive
<title>, meta description, one real<h1>, crawlable content in initial HTML or truthful fallback, canonical URL, Open Graph + Twitter card tags, correct status code,noindexonly when intentional. - Site-level:
robots.txt,sitemap.xml, canonical host strategy, consistent internal linking, no broken docs/marketing links, favicon + social preview assets. - Indexability checks:
curlpage and verify meaningful content without JS; route not blocked byrobots.txt; meta robots notnoindexunless intentional; canonical points to intended public URL. - Domain visibility checks: docs/landing/CTA all resolve; install instructions point to real public artifacts; social share preview not broken.
If a stranger cannot discover, understand, and try the product quickly, release is incomplete.
Onboarding Truth
Verify the first-user path: install from published artifacts (not the repo), follow the public quickstart cold, screenshots and demos match reality, app or CLI starts without dev-only assumptions, errors are human-readable.
Post-Release Smoke Verification
Verify from a cold path. The dev machine is not a witness.
Install from the published artifact (npm/cargo/PyPI/GitHub Release/Docker registry — never local checkout, never side-loaded tarball, never dev branch). Then verify: public URL resolves, TLS valid + matches canonical host, health endpoint passes, core action works end to end, docs and CTA links resolve, published version matches running version, onboarding screenshots/demos match cold-installer output.
Report must name exact artifact source (registry URL, tag, digest, download URL). "It worked on my repo" does not satisfy this gate.
Every vc-release run must produce a report with actual evidence. Cannot honestly say "done" without the four mandatory sections below. If any is missing, release is blocked until filled or the user accepts the gap in writing.
Canonical template:
references/release-report-template.md. Full operator checklist:references/release-checklist.md. Deployment reality deep-dive:references/deployment-reality.md.
Release Report Contract
Mandatory sections:
- Security gate — command run (
make semgrepor equivalent), exit status and finding count, per-finding classification (rule id, severity, file, line range, dataflow boundary), resolution per finding (fixed in commit X / accepted with reason / deferred with tracking issue), explicit statement when gate was not actually satisfied. - Exposed surface inventory — listening ports and bind addresses (default
127.0.0.1, document every0.0.0.0), reverse proxy in front (Caddy/Nginx/cloud LB/none) and where TLS terminates, authentication boundaries per surface, response headers added/stripped at the edge (HSTS, CSP, frame options, CORS allowlist), secret materialization path. - Deployment mode decision — chosen topology with justification, why it is the smallest honest fit, rollback story (how to revert without manual heroics).
- Post-release install smoke — artifact source (registry URL, tag, digest, download URL — never
file://from working tree), command sequence executed from clean environment, first-run output evidence (exit code, version banner, health check), any drift between documented quickstart and observed behavior.
Sign-off only when all four sections are populated and each has objective evidence attached. A green Semgrep gate without exposed-surface inventory is not a sign-off. A topology decision without a smoke run is not a sign-off. Truth is cumulative.
Financial / Legal Reality
Hosting and bandwidth costs understood, registry/CDN limits known, LICENSE correct, SECURITY.md exists, privacy policy/terms exist if user data is involved. Do not market proprietary as open source. Do not collect data without saying so.
Anti-Patterns
- Publishing without
vc-dou - Skipping hydration and assuming users will figure it out
- No Semgrep or equivalent security gate
- Exposing services on
0.0.0.0without deliberate proxy/TLS design - Broken canonical domain or redirect logic
- Forgetting verification challenge files / TXT records
- Shipping a JS-only empty shell that crawlers cannot understand
- Tagging without a changelog
- Deploying without post-release smoke checks
- Treating release as one-time ceremony instead of repeatable discipline
Final Principle
Ship only when it is safe enough, visible enough, installable enough, understandable enough, and the deployment story is boring enough to trust. If not, the honest result of vc-release is not "done" — it is "blocked, for these exact reasons."
𝚅𝚒𝚋𝚎𝚌𝚛𝚊𝚏𝚝𝚎𝚍. with AI Agents by Vetcoders (c)2024-2026 LibraxisAI
What ships with it: 6 files
19.0 KB alongside SKILL.md
.claude-plugin/
- plugin.json247 B
agents/
- openai.yaml399 B
references/
- deployment-reality.md6.7 KB
- release-checklist.md5.2 KB
- release-report-template.md5.0 KB
- FLOW.md1.5 KB