From personal-corp-skills
Publishes private, vendor, or mixed artifacts to public repos/registries with provenance inventory, license/security review, allowlist, staging, approval dry run, and fresh clone/install verification.
How this skill is triggered — by the user, by Claude, or both
Slash command
/personal-corp-skills:safe-public-releaseThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Turn a private, vendor-provided, runtime-generated, or mixed artifact into a public package without leaking secrets, private state, or material that cannot be redistributed.
Turn a private, vendor-provided, runtime-generated, or mixed artifact into a public package without leaking secrets, private state, or material that cannot be redistributed.
One pipeline:
intent → owner issue tree → inventory → provenance → license → security/privacy → allowlist → clean package → approval → publish → fresh public verification → maintenance
The skill is allowlist-first. Never copy a whole runtime/private directory and hope denylist cleanup finds everything.
Publishing is an outward mutation. Before creating a public repository, changing visibility, pushing a release, or publishing to a registry:
PACKAGE-READY with no unresolved provenance/license/security blockers;A request to "prepare" or "review" a release authorizes read-only analysis and private/internal artifacts, not public publication.
corp-new; it requires a separate approval dry run.Resolve configuration from the user, project instructions, then defaults:
## Safe Public Release Config
- internal_owner_repo: owner/corp-opensource-or-project
- public_github_owner: owner
- staging_root: /tmp/safe-public-release
- allowed_public_licenses: MIT, Apache-2.0, BSD-2-Clause, BSD-3-Clause
- secret_scanners: gitleaks, trufflehog
- approval_mode: explicit-before-publish
Do not block preparation when optional scanners are unavailable. Record the limitation and keep the release blocked until equivalent manual and repository-native checks are completed. Never claim a scan ran when it did not.
Before extraction or packaging, find or create three scopes in the internal owner repo:
Separate unrelated work:
If the user has an issue-management skill such as manager, use it for the issue tree and cross-repo links.
Use exactly one current status:
DISCOVEREDINVENTORYPROVENANCE-CLEAREDLICENSE-CLEAREDSECURITY-CLEAREDPACKAGE-READYAPPROVEDPUBLISHEDVERIFIEDMAINTAINEDBLOCKED-PROVENANCEBLOCKED-LICENSEBLOCKED-SECURITYBLOCKED-OWNER-APPROVALNO-GO-VENDOR-PROTECTEDNO-GO-MIXED-PRIVATE-DATAEvery blocked status needs one concrete unblock_event: source found, written permission, license clarified, secret removed and rotated, scope reduced, or owner approval.
Record:
Do not create the public repository yet.
Create release-manifest.yaml using the bundled template.
For each candidate artifact record:
Visibility inside an application or runtime does not prove ownership or permission to redistribute.
| Class | Default decision |
|---|---|
| Owner-authored source | Candidate after license/security review |
| Third-party redistributable source | Candidate with preserved notices |
| Generated build artifact | Regenerate from allowlisted source |
| Runtime state, cache, queue, session | Exclude |
| Logs, transcripts, histories | Exclude or separate privacy review |
| Credentials, tokens, cookies, keys | Exclude; rotate if exposed |
| Customer, student, employee, user data | Exclude; aggregate only under a separate privacy owner |
| Vendor-protected or unknown source | Block |
| Mixed bundle | Split before review |
| Symlink, submodule, archive, binary | Inspect target/content and license before allowlist |
Every file in the future public tree must be reachable from an explicit allowlist entry.
For each candidate prove:
Unknown provenance → BLOCKED-PROVENANCE.
Do not publish a "cleaned up" artifact whose origin cannot be explained.
Check:
Attribution is not permission. A missing, custom, or unclear license means BLOCKED-LICENSE until the artifact is excluded or permission is obtained.
The skill does not provide legal advice. When license interpretation changes material risk, record the evidence and route the decision to the appropriate owner or counsel.
Exclude at minimum:
.env*, API keys, OAuth state, cookies, credentials;Run checks on the clean staging tree, not only the source directory:
find . -type l -print
find . -type f -size +10M -print
rg -n --hidden -S '(api[_-]?key|secret|token|password|BEGIN [A-Z ]*PRIVATE KEY|Authorization: Bearer)' .
rg -n --hidden -S '(/Users/|/home/|C:\\Users\\|private-|corp-|localhost:[0-9]{2,5})' .
git diff --check
When approved tools are available:
gitleaks detect --no-git --source .
trufflehog filesystem --no-update .
A scanner passing does not replace manual review. A live secret finding stops the release: remove it, rotate it, document internally, rerun all relevant checks.
Never copy the whole source tree first.
allowlist.txt from the reviewed manifest.Example:
rm -rf "$STAGING_ROOT/package"
mkdir -p "$STAGING_ROOT/package"
rsync -a --files-from=allowlist.txt SOURCE_ROOT/ "$STAGING_ROOT/package/"
cd "$STAGING_ROOT/package"
find . -type f -print | sort
Orphaning a SKILL.md from its references/scripts is a failed package, even when the main file is safe.
The package must contain or link to:
README.md;Do not claim compatibility that the public smoke test has not verified.
Use the bundled checklist. Show the user:
Release: <name>
Target: <public owner/repo or registry>
Allowed artifacts: <count and short list>
Blocked/excluded artifacts: <count and reasons>
Source licenses: <summary>
Security/privacy checks actually run: <commands and results>
Fresh-clone verification plan: <command>
Maintenance owner: <owner>
Open risks: <none or list>
Proposed outward action: create repo | change visibility | push | publish package
Stop and request explicit approval. Continue only for the exact target and artifact set approved.
After approval:
refs owner/repo#N;If the public target is different from the approved dry run, stop and re-approve.
Test as an external user from a fresh directory:
workdir=$(mktemp -d)
git clone --depth 1 https://github.com/OWNER/REPO.git "$workdir/repo"
cd "$workdir/repo"
Run the documented public command:
--help or bounded smoke;Repeat the relevant secret/private-path scans on the fresh clone. PUBLISHED becomes VERIFIED only after this passes.
Write a release evidence card in the internal owner issue:
release_status: VERIFIED
public_url: https://github.com/OWNER/REPO
source_version: ...
manifest: release-manifest.yaml
license_basis: ...
security_checks: ...
publication_commit: ...
fresh_clone_command: ...
fresh_clone_result: PASS
maintenance_owner: ...
next_review: YYYY-MM-DD
After every release or blocked decision, add the new failure mode or rule to this skill or its references.
| Failure | Rule |
|---|---|
| Runtime folder copied wholesale | Allowlist-first clean staging |
| Attribution added, license still unknown | Attribution is not permission; block |
| Main skill copied without references/scripts | Release the complete functional bundle |
| Secret scan green, private path leaked | Manual classification plus private-path scan |
| Works in owner checkout, fails after clone | Fresh public-boundary smoke is mandatory |
| Evaluation mixed with redistribution | Separate issues and risk owners |
| Public repo created before inventory | No outward mutation before PACKAGE-READY and approval |
| Vendor asset visible in UI/runtime | Visibility does not imply redistribution rights |
| Release published with no owner | Maintenance owner and next review are required |
Report only verified facts:
Prepared: <artifact/release>
Status: <state>
Public action: published | not published
Target: <URL or planned target>
Allowed: <count>
Blocked/excluded: <count + reasons>
Checks run: <summary>
Fresh public verification: PASS | NOT RUN | FAILED
Owner issue: <reference>
Next gate: <one concrete action>
npx claudepluginhub serejaris/personal-corp-skills --plugin personal-corp-skillsSanitizes GitHub repos for public release (secrets scan, artifact removal, LICENSE/README validation) then creates tags and publishes via gh CLI.
Forks private projects, strips secrets/internal references, verifies cleanliness, and packages them with CLAUDE.md, README, and setup.sh for safe public release.
Converts a personal agent skill into a distributable open-source package with PII audit, generalization, license check, and packaging workflow.