chore: remove duplicate scripts/ dir and clean .gitignore

- Delete scripts/sync_repo_metadata.py and scripts/update_readme.py
  (identical copies already in tools/scripts/, CI uses tools/scripts/)
- Remove stale .gitignore entries: walkthrough.md, LOCAL_CONFIG.md
- Update scripts/* patterns → tools/scripts/* in .gitignore
- Stage previously-hidden docs/walkthrough.md and docs/users/walkthrough.md
  (were incorrectly excluded by the now-removed walkthrough.md rule)
This commit is contained in:
sck_0
2026-03-06 16:01:39 +01:00
parent cd5a218115
commit 334faaa672
6 changed files with 194 additions and 347 deletions

12
.gitignore vendored
View File

@@ -8,10 +8,8 @@ __pycache__/
# npm pack artifacts # npm pack artifacts
antigravity-awesome-skills-*.tgz antigravity-awesome-skills-*.tgz
walkthrough.md
.agent/rules/ .agent/rules/
.gemini/ .gemini/
LOCAL_CONFIG.md
data/node_modules data/node_modules
# Temporary analysis and report files # Temporary analysis and report files
@@ -27,11 +25,11 @@ similar_skills_*.json
remaining_*.json remaining_*.json
html_*.json html_*.json
# Temporary analysis scripts # Temporary analysis scripts (tools/scripts/)
scripts/*voltagent*.py tools/scripts/*voltagent*.py
scripts/*html*.py tools/scripts/*html*.py
scripts/*similar*.py tools/scripts/*similar*.py
scripts/*count*.py tools/scripts/*count*.py
# Optional baseline for legacy JS validator (scripts/validate-skills.js) # Optional baseline for legacy JS validator (scripts/validate-skills.js)
validation-baseline.json validation-baseline.json

View File

@@ -1,4 +1,4 @@
<!-- registry-sync: version=7.0.1; skills=1206; stars=20844; updated_at=2026-03-06T14:54:41+00:00 --> <!-- registry-sync: version=7.0.1; skills=1206; stars=20847; updated_at=2026-03-06T15:01:15+00:00 -->
# 🌌 Antigravity Awesome Skills: 1,206+ Agentic Skills for Claude Code, Gemini CLI, Cursor, Copilot & More # 🌌 Antigravity Awesome Skills: 1,206+ Agentic Skills for Claude Code, Gemini CLI, Cursor, Copilot & More
> **The Ultimate Collection of 1,206+ Universal Agentic Skills for AI Coding Assistants — Claude Code, Gemini CLI, Codex CLI, Antigravity IDE, GitHub Copilot, Cursor, OpenCode, AdaL** > **The Ultimate Collection of 1,206+ Universal Agentic Skills for AI Coding Assistants — Claude Code, Gemini CLI, Codex CLI, Antigravity IDE, GitHub Copilot, Cursor, OpenCode, AdaL**

185
docs/users/walkthrough.md Normal file
View File

@@ -0,0 +1,185 @@
# Walkthrough: Integration of PRs 35 & 36 (Release v3.5.0)
## Overview
Integrated **PR #35** (Translation) and **PR #36** (New Community Contributors), enhancing documentation and expanding the skill registry.
## Changes Verified
### 1. New Skills / Content
- **PR #35**: Translated `daily-news-report` description to English.
- **PR #36**: Added `infinite-gratitude` and `claude-api-cost-optimization` to Community Contributors.
### 2. Documentation Updates
- **README.md**:
- Updated generic skill count to **256+**.
- Updated `## Repo Contributors` list (synced with `git shortlog`).
- Bumped version to **v3.5.0**.
- **CHANGELOG.md**: Added release notes for v3.5.0.
### 3. Maintenance Protocols
- **Validation Chain**:
- `validate_skills.py`: Verified (Note: Strict mode warns on legacy skills).
- `generate_index.py`: Regenerated `skills_index.json`.
- `update_readme.py`: Synced registry table.
- **Stats Check**: Confirmed 256 skills across `README.md` and `docs/GETTING_STARTED.md`.
## Verification Results
- **Functional**: Skills are indexed and visible.
- **Protocol**: `MAINTENANCE.md` followed (Validation + Sync + Release).
## Next Steps
- Release v3.5.0 is ready for deployment (`git push` & `git tag`).
---
## Update 2026-01-28: Documentation Counts Sync
## Overview
Aligned documentation skill counts with the latest catalog total.
## Changes Verified
### 1. Documentation Updates
- **README.md**: Updated headline/intro counts to **552+** and synced the browse section label.
- **docs/GETTING_STARTED.md**: Updated references to **552** skills and pointed the registry link to `CATALOG.md`.
### 2. Consistency Checks
- **TOC anchors**: Updated the browse anchor to match the new header.
---
## Update 2026-01-28: Features Table & Repo Cleanup
## Overview
Added a precise category table in the README and reduced top-level clutter by moving onboarding docs into `docs/`.
## Changes Verified
### 1. Documentation Updates
- **README.md**: Replaced the category bullet list with a detailed table and updated the Getting Started link path.
- **docs/FAQ.md**: Updated skill counts and catalog links.
### 2. Repository Organization
- Moved onboarding docs into `docs/`:
- `GETTING_STARTED.md``docs/GETTING_STARTED.md`
- `FAQ.md``docs/FAQ.md`
- `WALKTHROUGH.md``docs/WALKTHROUGH.md`
# Walkthrough: SEO Optimization for Multi-IDE Visibility
## Obiettivo
Ottimizzare il posizionamento SEO del repository `antigravity-awesome-skills` per apparire nelle ricerche di tutti i principali strumenti di AI coding.
## Strumenti Target
| Strumento | Badge | Status |
| --------------- | ----- | ----------- |
| Claude Code | 🟣 | ✅ Aggiunto |
| Gemini CLI | 🔵 | ✅ Aggiunto |
| Codex CLI | 🟢 | ✅ Aggiunto |
| Antigravity IDE | 🔴 | ✅ Aggiunto |
| GitHub Copilot | 🩵 | ✅ Aggiunto |
| Cursor | 🟠 | ✅ Aggiunto |
| OpenCode | ⚪ | ✅ Aggiunto |
## Modifiche Effettuate
### 1. Titolo Aggiornato
**Prima:**
```
# 🌌 Antigravity Awesome Skills: The Ultimate Claude Code Skills Collection
```
**Dopo:**
```
# 🌌 Antigravity Awesome Skills: 130+ Agentic Skills for Claude Code, Gemini CLI, Cursor, Copilot & More
```
### 2. Badge Aggiunti (7 totali)
![Badges Preview](https://img.shields.io/badge/Claude%20Code-Anthropic-purple)
![Badges Preview](https://img.shields.io/badge/Gemini%20CLI-Google-blue)
![Badges Preview](https://img.shields.io/badge/Codex%20CLI-OpenAI-green)
![Badges Preview](https://img.shields.io/badge/Cursor-AI%20IDE-orange)
![Badges Preview](https://img.shields.io/badge/GitHub%20Copilot-VSCode-lightblue)
![Badges Preview](https://img.shields.io/badge/OpenCode-CLI-gray)
![Badges Preview](https://img.shields.io/badge/Antigravity-DeepMind-red)
### 3. Nuova Sezione Compatibility
Aggiunta tabella con percorsi di installazione per ogni strumento:
| Tool | Type | Compatibility | Installation Path |
| --------------- | --------- | ------------- | ------------------- |
| Claude Code | CLI | ✅ Full | `.claude/skills/` |
| Gemini CLI | CLI | ✅ Full | `.gemini/skills/` |
| Codex CLI | CLI | ✅ Full | `.codex/skills/` |
| Antigravity IDE | IDE | ✅ Full | `.agent/skills/` |
| Cursor | IDE | ✅ Full | `.cursor/skills/` |
| GitHub Copilot | Extension | ⚠️ Partial | `.github/copilot/` |
| OpenCode | CLI | ✅ Full | `.opencode/skills/` |
### 4. Keywords Ampliate
**Prima:**
```
Claude Code, Antigravity, Agentic Skills, MCT, AI Agents, Autonomous Coding, Security Auditing, React Patterns.
```
**Dopo:**
```
Claude Code, Gemini CLI, Codex CLI, Antigravity IDE, GitHub Copilot, Cursor, OpenCode, Agentic Skills, AI Coding Assistant, AI Agent Skills, MCP, MCT, AI Agents, Autonomous Coding, Security Auditing, React Patterns, LLM Tools, AI IDE, Coding AI, AI Pair Programming, Vibe Coding, Agentic Coding, AI Developer Tools.
```
## Validazione
```bash
✅ Found and checked 132 skills.
✨ All skills passed basic validation!
```
## GitHub Topics (Azione Manuale)
Vai su https://github.com/sickn33/antigravity-awesome-skills e aggiungi questi topics:
```text
claude-code, gemini-cli, codex-cli, antigravity, cursor, github-copilot, opencode,
agentic-skills, ai-coding, llm-tools, ai-agents, autonomous-coding, mcp,
ai-developer-tools, ai-pair-programming, vibe-coding
```
## Commit
```
feat(SEO): optimize README for all AI coding tools (02fab35)
```
## Risultato Atteso
Il repository dovrebbe ora apparire nelle ricerche GitHub per:
- "gemini cli skills"
- "claude code skills"
- "cursor skills"
- "codex cli skills"
- "copilot skills"
- "opencode skills"
- "agentic skills"
- "ai coding tools"

3
docs/walkthrough.md Normal file
View File

@@ -0,0 +1,3 @@
# Walkthrough
This document moved to [`users/walkthrough.md`](users/walkthrough.md).

View File

@@ -1,78 +0,0 @@
#!/usr/bin/env python3
import argparse
import json
import os
import re
import sys
from update_readme import configure_utf8_output, find_repo_root, load_metadata, update_readme
ABOUT_DESCRIPTION_RE = re.compile(r'"description"\s*:\s*"([^"]*)"')
def update_package_description(base_dir: str, metadata: dict, dry_run: bool) -> bool:
package_path = os.path.join(base_dir, "package.json")
with open(package_path, "r", encoding="utf-8") as file:
content = file.read()
new_description = (
f"{metadata['total_skills_label']} agentic skills for Claude Code, Gemini CLI, "
"Cursor, Antigravity & more. Installer CLI."
)
updated_content = ABOUT_DESCRIPTION_RE.sub(
f'"description": "{new_description}"', content, count=1
)
if updated_content == content:
return False
if dry_run:
print(f"[dry-run] Would update package description in {package_path}")
return True
with open(package_path, "w", encoding="utf-8", newline="\n") as file:
file.write(updated_content)
print(f"✅ Updated package description in {package_path}")
return True
def print_manual_github_about(metadata: dict) -> None:
description = (
f"{metadata['total_skills_label']} curated SKILL.md files for Claude Code, "
"Cursor, Gemini CLI, Codex, Copilot, and Antigravity."
)
print("\nManual GitHub repo settings update:")
print(f"- About description: {description}")
print("- Suggested topics: claude-code, cursor, gemini-cli, codex-cli, github-copilot, antigravity")
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(
description="Synchronize repository metadata across README and package.json."
)
parser.add_argument("--dry-run", action="store_true", help="Preview updates without writing files.")
return parser.parse_args()
def main() -> int:
args = parse_args()
base_dir = find_repo_root(os.path.dirname(__file__))
metadata = load_metadata(base_dir)
print("Repository metadata")
print(json.dumps(metadata, indent=2))
readme_metadata = update_readme(dry_run=args.dry_run)
package_updated = update_package_description(base_dir, metadata, args.dry_run)
print_manual_github_about(readme_metadata)
if args.dry_run and not package_updated:
print("\n[dry-run] No package.json description changes required.")
return 0
if __name__ == "__main__":
configure_utf8_output()
sys.exit(main())

View File

@@ -1,261 +0,0 @@
#!/usr/bin/env python3
import argparse
import io
import json
import os
import re
import sys
import urllib.error
import urllib.request
from datetime import datetime, timezone
GITHUB_REPO = "sickn33/antigravity-awesome-skills"
SYNC_COMMENT_RE = re.compile(r"<!-- registry-sync: .*? -->")
def configure_utf8_output() -> None:
"""Best-effort UTF-8 stdout/stderr on Windows without dropping diagnostics."""
if sys.platform != "win32":
return
for stream_name in ("stdout", "stderr"):
stream = getattr(sys, stream_name)
try:
stream.reconfigure(encoding="utf-8", errors="backslashreplace")
continue
except Exception:
pass
buffer = getattr(stream, "buffer", None)
if buffer is not None:
setattr(
sys,
stream_name,
io.TextIOWrapper(buffer, encoding="utf-8", errors="backslashreplace"),
)
def find_repo_root(start_path: str) -> str:
current = os.path.abspath(start_path)
while True:
if os.path.isfile(os.path.join(current, "package.json")) and os.path.isfile(
os.path.join(current, "README.md")
):
return current
parent = os.path.dirname(current)
if parent == current:
raise FileNotFoundError("Could not locate repository root from script path.")
current = parent
def format_skill_count(total_skills: int) -> str:
return f"{total_skills:,}+"
def format_star_badge_count(stars: int) -> str:
if stars >= 1000:
rounded = int(round(stars / 1000.0))
return f"{rounded}%2C000%2B"
return f"{stars}%2B"
def format_star_milestone(stars: int) -> str:
if stars >= 1000:
rounded = int(round(stars / 1000.0))
return f"{rounded},000+"
return f"{stars}+"
def format_star_celebration(stars: int) -> str:
if stars >= 1000:
rounded = int(round(stars / 1000.0))
return f"{rounded}k"
return str(stars)
def fetch_star_count(repo: str) -> int | None:
url = f"https://api.github.com/repos/{repo}"
request = urllib.request.Request(
url,
headers={
"Accept": "application/vnd.github+json",
"User-Agent": "antigravity-awesome-skills-readme-sync",
},
)
try:
with urllib.request.urlopen(request, timeout=10) as response:
payload = json.load(response)
except (urllib.error.URLError, TimeoutError, json.JSONDecodeError):
return None
stars = payload.get("stargazers_count")
return int(stars) if isinstance(stars, int) else None
def load_metadata(base_dir: str, repo: str = GITHUB_REPO) -> dict:
readme_path = os.path.join(base_dir, "README.md")
package_path = os.path.join(base_dir, "package.json")
index_path = os.path.join(base_dir, "skills_index.json")
with open(index_path, "r", encoding="utf-8") as file:
skills = json.load(file)
with open(package_path, "r", encoding="utf-8") as file:
package = json.load(file)
with open(readme_path, "r", encoding="utf-8") as file:
current_readme = file.read()
current_star_match = re.search(r"%20([\d%2C\+]+)%20Stars", current_readme)
current_stars = None
if current_star_match:
compact = current_star_match.group(1).replace("%2C", "").replace("%2B", "")
compact = compact.rstrip("+")
if compact.isdigit():
current_stars = int(compact)
live_stars = fetch_star_count(repo)
total_stars = live_stars if live_stars is not None else current_stars or 0
return {
"repo": repo,
"version": str(package.get("version", "0.0.0")),
"total_skills": len(skills),
"total_skills_label": format_skill_count(len(skills)),
"stars": total_stars,
"star_badge_count": format_star_badge_count(total_stars),
"star_milestone": format_star_milestone(total_stars),
"star_celebration": format_star_celebration(total_stars),
"updated_at": datetime.now(timezone.utc).replace(microsecond=0).isoformat(),
"used_live_star_count": live_stars is not None,
}
def apply_metadata(content: str, metadata: dict) -> str:
total_skills = metadata["total_skills"]
total_skills_label = metadata["total_skills_label"]
version = metadata["version"]
star_badge_count = metadata["star_badge_count"]
star_milestone = metadata["star_milestone"]
star_celebration = metadata["star_celebration"]
sync_comment = (
f"<!-- registry-sync: version={version}; skills={total_skills}; "
f"stars={metadata['stars']}; updated_at={metadata['updated_at']} -->"
)
content = re.sub(
r"^# 🌌 Antigravity Awesome Skills: .*?$",
(
f"# 🌌 Antigravity Awesome Skills: {total_skills_label} "
"Agentic Skills for Claude Code, Gemini CLI, Cursor, Copilot & More"
),
content,
count=1,
flags=re.MULTILINE,
)
content = re.sub(
r"^> \*\*The Ultimate Collection of .*?\*\*$",
(
f"> **The Ultimate Collection of {total_skills_label} Universal Agentic "
"Skills for AI Coding Assistants — Claude Code, Gemini CLI, Codex CLI, "
"Antigravity IDE, GitHub Copilot, Cursor, OpenCode, AdaL**"
),
content,
count=1,
flags=re.MULTILINE,
)
content = re.sub(
r"https://img\.shields\.io/badge/⭐%20[\d%2C\+]+%20Stars-gold\?style=for-the-badge",
f"https://img.shields.io/badge/⭐%20{star_badge_count}%20Stars-gold?style=for-the-badge",
content,
count=1,
)
content = re.sub(
r"^\*\*Antigravity Awesome Skills\*\* is a curated, battle-tested library of \*\*.*?\*\* designed",
(
f"**Antigravity Awesome Skills** is a curated, battle-tested library of "
f"**{total_skills_label} high-performance agentic skills** designed"
),
content,
count=1,
flags=re.MULTILINE,
)
content = re.sub(
r"\[📚 Browse \d[\d,]*\+ Skills\]\(#browse-[^)]+\)",
f"[📚 Browse {total_skills_label} Skills](#browse-{total_skills}-skills)",
content,
count=1,
)
content = re.sub(
r"\*\*Welcome to the V[\d.]+ .*? Stars Celebration Release!\*\*",
f"**Welcome to the V{version} {star_celebration} Stars Celebration Release!**",
content,
count=1,
)
content = re.sub(
r"> \*\*🌟 .*? GitHub Stars Milestone!\*\*",
f"> **🌟 {star_milestone} GitHub Stars Milestone!**",
content,
count=1,
)
content = re.sub(
r"\*\*Antigravity Awesome Skills\*\* \(Release [\d.]+\) is a massive upgrade to your AI's capabilities, now featuring \*\*.*?\*\* skills",
(
f"**Antigravity Awesome Skills** (Release {version}) is a massive upgrade "
f"to your AI's capabilities, now featuring **{total_skills_label} skills**"
),
content,
count=1,
)
content = re.sub(
r"## Browse \d[\d,]*\+ Skills",
f"## Browse {total_skills_label} Skills",
content,
count=1,
)
content = re.sub(
r"<!-- registry-sync: .*? -->\n?",
"",
content,
count=1,
)
return f"{sync_comment}\n{content.lstrip()}"
def update_readme(dry_run: bool = False) -> dict:
base_dir = find_repo_root(os.path.dirname(__file__))
readme_path = os.path.join(base_dir, "README.md")
metadata = load_metadata(base_dir)
print(f"📖 Reading README from: {readme_path}")
print(f"🔢 Total skills found: {metadata['total_skills']}")
print(f"🏷️ Version found: {metadata['version']}")
if metadata["used_live_star_count"]:
print(f"⭐ Live GitHub stars found: {metadata['stars']}")
else:
print(f"⭐ Using existing README star count: {metadata['stars']}")
with open(readme_path, "r", encoding="utf-8") as file:
content = file.read()
updated_content = apply_metadata(content, metadata)
if dry_run:
print("🧪 Dry run enabled; README.md not written.")
return metadata
with open(readme_path, "w", encoding="utf-8", newline="\n") as file:
file.write(updated_content)
print("✅ README.md updated successfully.")
return metadata
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(description="Sync generated metadata into README.md.")
parser.add_argument("--dry-run", action="store_true", help="Compute metadata without writing files.")
return parser.parse_args()
if __name__ == "__main__":
configure_utf8_output()
args = parse_args()
update_readme(dry_run=args.dry_run)