How the Copyright Gate Prevents Publishing Skills Derived from Copyrighted Books
The copyright gate in book-to-skill forces private repository visibility unless the user explicitly answers the bare word public and the source material passes a fair‑use eligibility check.
The virgiliojr94/book-to-skill repository converts books into GitHub Copilot skills, but it builds in multiple safeguards to prevent accidental public distribution of content derived from copyrighted works. These protections are concentrated in Step 11 of the workflow defined in SKILL.md, where a multi-layered gate system controls repository visibility.
Where the Copyright Gate Lives
The publishing workflow is documented in SKILL.md at lines L624–L628. Two sequential checks run before any gh repo create command executes:
- Visibility check – requires the literal answer
public - Copyright gate – verifies source material eligibility
Only when both checks pass does the tool append --public to the GitHub CLI command. Otherwise, it defaults to --private with user notification.
The Two-Step Enforcement Mechanism
Step 1: Bare-Word Visibility Verification
The tool prompts users with a strictly formatted question:
"Private or public repository? Reply with one word:
privateorpublic."
The parser performs exact string matching on the response. Variations like "make it public," "public domain," or "yes public" all fail and trigger the private fallback. This design eliminates ambiguity in user intent.
# From SKILL.md line L624
visibility = ask_user("Private or public repository? Reply with one word: `private` or `public`.")
if visibility != "public":
repo_visibility = "--private"
This strict parsing is tested in tests/test_publish_visibility_gate.py, which verifies that only the isolated token public permits non-private repository creation.
Step 2: Fair-Use Copyright Gate
When the visibility check returns public, the workflow proceeds to SKILL.md for source material verification:
# Inside Step 11 publishing logic
if source_is_third_party_copyrighted():
print("⚠️ Source is copyrighted – forcing private repo.")
repo_visibility = "--private"
else:
repo_visibility = "--public"
The gate enforces the README's stated policy: skills generated from third-party copyrighted books must stay private. Public repositories are permitted only for:
- User-original writing
- Openly-licensed source material
- Cases where the user explicitly confirms redistribution rights
Technical Implementation of Repository Creation
The final gh command construction follows this decision tree:
# Pseudocode extracted from Step 11
if visibility_answer == "public" and copyright_ok:
gh repo create <repo> --public --source . --push
else:
gh repo create <repo> --private --source . --push
The --public flag never appears in the generated command unless both gates pass. This prevents command injection or flag manipulation from bypassing the policy.
Pre-Push Safety Scan (Step 9.5)
Before any repository push occurs, the workflow runs tools/scan_generated_skill.py:
python -m tools.scan_generated_skill /home/user/.copilot/skills/book-to-skill
If this scanner detects policy violations—such as excessive verbatim reproduction from source material—it exits with a non-zero status code. The publishing script aborts immediately, ensuring that even theoretically private repositories never receive non-compliant content.
Complete Workflow Example
Triggering the full conversion and publish sequence:
# Initial conversion
book-to-skill ./my-book.pdf
# ... steps 1-10 execute ...
# Step 11: Publishing prompt appears
# "Private or public repository? Reply with one word: `private` or `public`."
Scenario A: Accidental public attempt on copyrighted book
> public
⚠️ Source is copyrighted – forcing private repo.
Repository created as private.
Scenario B: Valid public publication of original work
> public
Source verification passed.
Repository created as public.
Scenario C: Ambiguous response
> I want it public
Unrecognized response. Defaulting to private.
Repository created as private.
File Reference Summary
| File | Role in Copyright Protection |
|---|---|
SKILL.md |
Contains visibility question and copyright gate logic |
tools/scan_generated_skill.py |
Pre-push policy violation scanner |
tests/test_publish_visibility_gate.py |
Automated verification of gate behavior |
README.md |
Documents fair-use principles and redistribution policy |
Summary
- Exact-word parsing of the visibility response prevents accidental public selection through phrasing variations or synonyms.
- Source material verification blocks public repositories when third-party copyrighted books are detected as the origin.
- Command construction logic physically prevents
--publicflag injection unless both gates explicitly permit it. - Pre-push scanning via
tools/scan_generated_skill.pyprovides final content verification before any repository receives files.
Frequently Asked Questions
What happens if I type "make it public" instead of just "public"?
The tool rejects any response that is not the isolated bare word public. Your repository will be created as private, and you will receive notification that the unrecognized response triggered the default behavior.
Can I override the copyright gate if I believe my use qualifies as fair use?
No. The current implementation in SKILL.md does not provide override mechanisms for third-party copyrighted sources. Fair-use determinations require legal analysis that the automated tool cannot perform, so it conservatively forces private visibility for all in-scope copyrighted materials.
Does the scanner examine the actual book content or just metadata?
tools/scan_generated_skill.py analyzes the generated skill structure for policy violations including excessive verbatim reproduction. It does not re-scan the original PDF but evaluates whether the synthesized skill output complies with redistribution guidelines before any push occurs.
Is there any way to convert a private skill to public later through GitHub directly?
While GitHub allows visibility changes through its web interface, doing so would violate the fair-use policy enforced by this tool. The book-to-skill workflow is designed to prevent creation of public repositories containing skill derivatives from copyrighted books at the infrastructure level, not merely as a UI suggestion.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →