# Publish Guard > Check how a team's SDKs, CLIs and images reach npm, PyPI, Maven Central, NuGet, crates.io, RubyGems, Go, Docker > Hub and private feeds against secure publishing. List the packages and paste the release workflow; the browser > dates every credential against an as-of day, counts owners and phishing-resistant 2FA, lints the workflow, ranks the > credential rung per registry, says what goes first and scores the five gates. Metered runs write the publishing > plan, and the rollback runbook. Built on the SkillSafe skill @samber/sdk-package-publishing, from > samber/developer-platform-skills (MIT), by Samuel Berthe. https://publish-guard.skillsafe.ai/ ## What is free - Credentials: long-lived tokens on registries that accept OIDC from the team's CI, tokens with no expiry on record, anything expired or expiring within two weeks of the as-of date, credentials nobody named, laptop publishes. - Owners: at least two per package, on a security key or passkey rather than an authenticator app or SMS. - The release workflow (GitHub Actions): pull_request_target and workflow_run triggers, default permissions, actions pinned to a full commit SHA, restored caches, the OIDC identity outside the publish job, the publish job in a protected environment and separate from the build, a dry-run step, a tag trigger. Publish steps are recognised by their commands. - Rankings: trusted publishing, a narrow bot-owned token or the tag ruleset per registry; a human approval gate for paying customers, many dependents or after an incident; provenance when buyers ask; what goes first (an incident runs the rollback runbook, a deadline migrates the credential that runs out first); private consumption. - The five gates, a hardened release workflow (actions and secrets as placeholders), a per-registry rollback sheet, and exports: the inventory (.csv), the checks (.csv), everything (.json). - A real token pasted by mistake is flagged, masked and never sent or saved. ## The metered lanes Two tasks on gpt-terra, metered per run, routed by `task`. Input string fields: `task` (plan or runbook), `team`, `pipeline`, `carry` (runbook only: the plan's decisions) and `facts`. - `plan` replies with `summary`, `assumptions`, `registries` (each with rung, approval, provenance, namespace, channel and preflight), `workflow`, `revoke`, `migration` (dated steps with evidence) and `caveats`. - `runbook` replies with `summary`, `registries` (each with a rehearsal target and five steps: fix-version, soft-remove, isolate-rotate, hard-delete, announce), `private`, `gates` (the five, each with a test) and `caveats`. The page holds every reply to its own facts: every ranked registry with its rung, approval gate and provenance, reviewers exactly when a gate is ranked, tokens to revoke, dated steps that start with what goes first; the five rollback steps in order, the registry's own soft removal, no dry-run flag on a removal, hard deletion only for leaked secrets or malware, the private rung and the five gates. Publish Guard is an independent tool, not affiliated with or endorsed by any registry or CI it names. ## Links - API tutorial: https://publish-guard.skillsafe.ai/api.html - Source skill: https://skillsafe.ai/skill/@samber/sdk-package-publishing