Install
$ agentstack add skill-avalonreset-legends-github-github-readme ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
GitHub README -- Generation and Optimization
Headless Contract
For deterministic local preview/write flows, use:
python3 scripts/run_headless.py readme --path /path/to/repo
python3 scripts/run_headless.py readme --path /path/to/repo --generate-assets
python3 scripts/run_headless.py readme --path /path/to/repo --write
readme defaults to preview mode. It writes .github-audit/readme-data.json plus README-REPORT.md, README-PREVIEW.md, and README-SUMMARY.json. --write is the explicit approval gate for rewriting README.md. --generate-assets reuses an existing banner asset when present, otherwise it can generate a KIE-backed banner plus assets/social-preview.jpg and records local/raw/settings links in the cache and report artifacts.
Process (GARE Pattern)
1. Gather
Step 0 -- Check shared data cache: Before gathering, check .github-audit/ for cached data from other skills. Reference: github/references/shared-data-cache.md for schemas.
seo-data.json(REQUIRED -- do NOT skip) -- primary keyword, secondary keywords, PAA
questions, AI visibility. If this cache file is missing, you MUST gather SEO data before proceeding. Check if DataForSEO MCP tools are available (search for dataforseo_labs_google_keyword_suggestions). If available, run the keyword research inline: generate 2 seed keywords from repo description → call keywordsuggestions for each → filter by volume/difficulty/relevance → call serporganicliveadvanced on the best candidate to verify GitHub repos can rank for it. This costs ~20-30 cents and is NON-NEGOTIABLE -- a README without data-backed keywords is a failed deliverable. If DataForSEO MCP is genuinely not configured (tools not found), THEN and ONLY THEN fall back to codebase-derived keywords and mark SEO as "unverified."
repo-context.json(optional) -- repo type, intent, language, metadata. If missing,
gather yourself via gh repo view.
legal-data.json(optional) -- license type for badge selection. If missing, just
check LICENSE file directly.
audit-data.json(optional) -- README quality findings from prior audit. If present,
use to prioritize which sections need the most improvement.
- Codebase scan: What does this project actually do?
- Read package.json/setup.py/Cargo.toml for description, scripts, dependencies
- Check for existing docs, examples, config files
- Identify main entry point and key exports/commands
- Existing README: Read current README.md (if any)
- Also check for README.rst (reStructuredText) -- some Python/Sphinx projects use it
- If both exist, README.md takes priority (GitHub renders it on the landing page)
- Assess structure, headings, content depth
- Identify what's missing vs. ideal for this repo type
- SEO data: Use keyword opportunity data from the orchestrator's SEO data pass,
or run github-seo inline if running standalone.
- If SEO data block was provided (from Step 3.5 of orchestrator), use it directly:
- Primary keyword (Sweet Spot category) → goes in H1 tagline and first paragraph
- Secondary keywords (Worth It category) → go in H2 headings where natural
- "Skip" keywords → do NOT target in H1/H2, but if a Skip keyword appears
naturally in body text and is semantically relevant, that's fine -- just don't optimize headings or structure around it. The distinction is between "targeting" (building structure around a keyword) and "mentioning" (natural use in prose).
- AI citation status → if not cited, add stronger "X is a Y that does Z" definition
- If running standalone via
github-readme, gather SEO data yourself: - If DataForSEO MCP available: run the Keyword Opportunity Framework from
github-seo skill (seed generation → keyword expansion → volume → difficulty → SERP viability check). The SERP check is critical -- only target keywords where GitHub repos actually appear in Google results.
- If DataForSEO not available: analyze codebase, check competitor repos via
gh search repos, apply patterns from github-seo-guide.md
- In all cases, produce: primary keyword, secondary keywords, recommended H1, H2 headings
- Every keyword placed in the README must have a justification (volume data, competitor
analysis, or codebase relevance)
- Legal data: Check LICENSE type for License section
- Audit data: If a prior
github-auditrun exists, use its README quality findings - Intent + repo type: From orchestrator context
- Banner status: Does the repo already have a banner image? Check for
assets/banner.webp,assets/banner.jpg,assets/banner.png, or any image referenced at the top of README
2. Analyze
Reference: Read github/references/readme-framework.md for structure patterns. Reference: Read github/references/repo-type-templates.md for per-type README structure.
Docs-site detection: If the Homepage URL points to a documentation site (readthedocs, github.io, custom docs domain) or the README links to external docs, apply adjusted expectations:
- Do NOT penalize for missing Installation/Configuration/API sections if docs
cover them -- the README is a gateway, not the full docs
- DO still require: strong H1 + tagline, opening paragraph with keywords,
badges, one code example, Contributing link, License mention
- Note in your analysis: "External docs detected at [URL] -- scoring adjusted"
- Completeness score should evaluate whether the README effectively directs
users to the docs, not whether it duplicates them
Score the current README (if exists) using these objective rubrics. Each criterion has specific checkpoints worth defined points. Score by counting what's present -- not by subjective impression.
Structure (20 points max)
| Checkpoint | Points | |------------|--------| | Exactly one H1 heading | 4 | | H1 includes descriptive tagline (not just project name) | 4 | | Proper heading hierarchy (no skipped levels) | 4 | | At least 4 H2 sections | 4 | | Table of Contents present (for READMEs with 4+ sections) | 4 |
Content Depth (20 points max)
| Checkpoint | Points | |------------|--------| | Installation/setup instructions with code block | 5 | | At least one usage example with code block | 5 | | Configuration, API reference, or detailed options/commands section (skip if repo type doesn't need config -- redistribute 4 pts to other Content checkpoints) | 4 | | Architecture/how-it-works explanation | 3 | | Troubleshooting, FAQ, or common issues | 3 |
SEO Optimization (20 points max)
| Checkpoint | Points | |------------|--------| | Primary keyword in H1 (verified via SEO data, not guessed) | 6 | | Primary keyword in first paragraph | 4 | | Secondary keywords in at least 2 H2 headings | 4 | | All images have descriptive alt text with keywords | 3 | | Descriptive link text (no "click here") | 3 |
Badges (10 points max)
| Checkpoint | Points | |------------|--------| | At least one badge present | 3 | | License badge | 2 | | Version/release badge | 2 | | CI/build status or other quality signal badge | 3 |
Visual Appeal (10 points max)
| Checkpoint | Points | |------------|--------| | Banner image at top | 4 | | Code blocks use syntax highlighting (language specified) | 2 | | At least one table for structured data | 2 | | Short paragraphs (no walls of text over 5 sentences) | 2 |
Completeness (10 points max)
| Checkpoint | Points | |------------|--------| | All required sections for repo type present | 4 | | Contributing section or link to CONTRIBUTING.md | 2 | | License section with link to LICENSE file | 2 | | Links to external resources (docs, homepage, etc.) | 2 |
AI Citability (10 points max)
| Checkpoint | Points | |------------|--------| | Clear "X is a Y that does Z" definition in first 2 sentences | 4 | | Structured comparison table (vs alternatives) | 2 | | Answer-first formatting for key questions (FAQ or PAA-derived) | 2 | | Specific quantifiable claims (stats, benchmarks, counts) | 2 |
3. Recommend
Present README plan before writing:
## README Optimization Plan
### Current Score: XX/100
[breakdown by criterion]
### Proposed Structure:
1. Banner image (generated via KIE.ai GPT Image 2)
2. H1: [Project Name -- keyword-rich tagline]
3. Badges: [CI, version, license, downloads]
4. Opening paragraph: [with primary keyword]
5. Table of Contents
6. [Section list based on repo type]
### Banner Concept:
- Visual: [description of banner concept based on project domain]
- Aspect ratio: 21:9 (default) or [user preference]
- Resolution: 1K (default) or [user preference]
### Keyword Integration:
- H1: "[primary keyword]"
- First paragraph: "[primary keyword] naturally embedded"
- H2 headings: [list with secondary keywords]
### Data Sources Used:
- [list: codebase scan, SEO analysis, audit findings, etc.]
4. Execute (with user approval)
PAUSE HERE for interactive runs. After presenting the optimization plan (Step 3), ask the user: "Ready to generate the optimized README? (This will also generate a banner image if KIEAPIKEY is available.)"
Do NOT generate the README until the user confirms. The plan is the checkpoint -- the user may want to adjust the keyword strategy, change the tone, skip the banner, or add/remove sections before you write anything.
If the user invoked the skill with a clear directive like "generate a readme" or "optimize this readme", treat that as pre-approval and proceed without pausing. For deterministic run_headless.py readme --write, the --write flag is the explicit approval signal.
Generate the full README.md or a rewritten version of the existing one.
Write to shared data cache after generating the README:
mkdir -p .github-audit
grep -qxF '.github-audit/' .gitignore 2>/dev/null || echo '.github-audit/' >> .gitignore
Write .github-audit/readme-data.json with: timestamp, scorebefore, scoreafter, bannergenerated, bannerpath, keywordsintegrated (primaryinh1, primaryinfirstparagraph, secondaryinh2 list), sections list. Reference: github/references/shared-data-cache.md for exact schema.
README Generation Rules
Image Format Optimization (applies to ALL images)
Reference: Read github/references/banner-generation.md -- see the Image Format Optimization section for the full decision table.
The pipeline: always generate as PNG (lossless source), then convert to the optimal delivery format. See banner-generation.md for the full Image Format Pipeline section.
When generating or placing images in the README:
- Banners (AI-generated): request PNG from KIE.ai, convert to WebP (quality 80).
WebP is ~30% smaller than JPEG and GitHub renders it natively.
- Screenshots (terminal, UI): keep as PNG. Lossless, sharp text, often smaller
than lossy formats for flat-color content. Do NOT convert screenshots.
- Logos/icons: PNG or SVG. Clean edges need lossless compression.
- Flag existing repo images using the wrong format or that are oversized:
- PNG banners/photos > 200KB: convert to WebP (saves 60-70%)
- JPEG screenshots with blurry text: should be PNG
- Any image > 1MB: flag for optimization
Offer to convert, not just flag. Use Pillow to convert, strip metadata, and show savings:
from PIL import Image
import os
src = Image.open("assets/banner.png")
clean = Image.new(src.mode, src.size) # strip all metadata
clean.putdata(list(src.getdata()))
clean.save("assets/banner.webp", "WEBP", quality=80, method=6)
old = os.path.getsize("assets/banner.png")
new = os.path.getsize("assets/banner.webp")
print(f"{old//1024}KB -> {new//1024}KB ({100-new*100//old}% smaller, metadata stripped)")
Banner Image (Standard Practice -- Two-Step)
Every README should include a professional banner. Generate one as part of the standard README creation/optimization workflow using the two-step process.
Reference: Read github/references/banner-generation.md for full details including prompt strategy, text compositing script, and positioning principles.
Banner + Social Preview flow (MANDATORY -- do not skip any step):
- Craft a background prompt (visual metaphor, NO text in image, subject offset to one side)
- Call KIE.ai GPT Image 2 API to generate background (21:9)
- Poll for completion, download the generated source as
assets/banner-source.png - Composite text overlay via Pillow (project name, tagline, optional features)
- Convert to WebP (quality 80):
assets/banner.webp, delete source PNG - Place at the very top of README, before H1:
- Generate social preview from the banner (see Social Preview Pipeline below)
This is a 7-step flow, not 6. The social preview is not optional.
Prerequisite: Load KIEAPIKEY from the standard dotenv locations:
if [ -z "$KIE_API_KEY" ]; then
for envfile in ./.env.local ./.env github/.env.local github/.env ~/.env.local ~/.env; do
if [ -f "$envfile" ]; then
export $(grep -v '^#' "$envfile" | xargs) 2>/dev/null
break
fi
done
fi
[ -n "$KIE_API_KEY" ] && echo "KIE_API_KEY loaded" || echo "KIE_API_KEY NOT FOUND"
If the key is not found after checking those dotenv locations, STOP and show this message:
Banner generation requires a KIE.ai API key. It takes about 2 minutes to set up:
1. Go to https://kie.ai/api-key and create a free account
2. Copy your API key
3. Paste it into `./.env.local` (preferred) or `github/.env`:
KIE_API_KEY=your_key_here
Want to set this up now, or skip the banner and continue with the README?
Wait for the user to respond. If they want to set it up, help them. If they say skip/continue/later, generate the rest of the README with a placeholder comment: `` at the top.
Social Preview Pipeline (MANDATORY after banner generation)
After generating the README banner, ALWAYS run the social preview pipeline. This is step 7 of the banner flow. Do NOT skip it.
Reference: Read github/references/banner-generation.md section "Social Preview Image Generation" for the full pipeline and Pillow script.
The pipeline:
- Feed the banner into KIE.ai as
input_urlswithgpt-image-2-image-to-imageat 16:9 aspect ratio.
This recomposes the design for the new ratio (AI adapts layout, centers elements). Use the raw GitHub URL of the pushed banner as the input_urls source. If the banner is WebP, convert to PNG first (GPT Image 2 rejects WebP input).
- Poll for completion, download the 16:9 result.
- Crop the 16:9 to 2:1 (center crop, trim ~5% from top and bottom).
- Resize to exactly 1280x640 (GitHub's required dimensions).
- Save as JPEG at quality 85 (GitHub rejects WebP for social previews, and
PNGs at 1280x640 often exceed the 1MB upload limit). Strip all metadata.
- If over 1MB, re-save at quality 70.
- Save to
assets/social-preview.jpg. - Show the user the result via Read tool, provide clickable links, and provide
the manual upload instructions for https://github.com/{owner}/{repo}/settings.
Fallback: No banner exists (new project or banner was skipped): If there is no banner to feed as input_urls, generate the social preview from scratch as a standalone gpt-image-2-text-to-image KIE.ai call at 16:9. Use this prompt formula:
Professional 16:9 social preview card for a GitHub project called "[Project Name]".
Dark background with [color accent matching project theme]. Text "[Project Name]"
centered in bold white sans-serif, subtitle "[one-line description]" below in
smaller text. Clean, modern tech aesthetic. Centered composition with padding
on all edges (critical for the 2:1 crop that follows).
Then run the same crop/resize/JPEG pipeline as the banner-based path (steps 3-8). The key difference: explicitly ask for centered composition with edge padding, because there's no existing design to recompose from and the 2:1 crop will trim the top and
…
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: avalonreset
- Source: avalonreset/legends-github
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.