Github project audit
Skill jahfaliabdulrahman-dev/hermes-skills/skills/github-project-audit
Deep evaluation of a GitHub repository — structure, security, licensing, maintenance signals, and hype-vs-substance analysis.From its SKILL.md
npx -y skills add jahfaliabdulrahman-dev/hermes-skills --skill github-project-auditAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
11.0 KB, ~2.6k tokens by cl100k_base, as published. Nobody here has run it
GitHub Project Audit
Use when the user asks to evaluate, review, or analyze a GitHub repository in depth.
Methodology
Conduct a multi-layered investigation in parallel where possible:
Layer 1 — Verified Stats (GitHub API)
# Use execute_code to fetch and parse repo metadata
from hermes_tools import web_extract
result = web_extract(["https://api.github.com/repos/OWNER/REPO"])
Report: Stars, Forks, Language, Description, Default branch, Created, Pushed, Size, Open issues, License.
Layer 2 — Contributors & Bus Factor
Fetch contributors via web_extract on https://api.github.com/repos/OWNER/REPO/contributors?per_page=10. Report top contributors, concentration risk, and bus factor.
Layer 3 — Commit Activity & Velocity
Fetch commits via web_extract on https://api.github.com/repos/OWNER/REPO/commits?per_page=15. Check: Is it still active? How many commits/day? Single maintainer or team?
Layer 4 — Documentation Analysis
Read these files if they exist:
README.md— what they claim to beLICENSE— verify actual license file (not just Cargo.toml/package.json metadata)SECURITY.md— responsible disclosure processROADMAP.md— future directionCONTRIBUTING.md— community governance
Critical: Compare declared license in config files vs actual LICENSE file. GitHub API returns license: null when no LICENSE file exists even if package metadata claims MIT/Apache.
Layer 5 — Source Code Security Audit
5a. Cross-Language Red Flag Patterns (check all repos)
Use GitHub code search via web_search or web_extract to scan for dangerous patterns:
- Shell execution:
exec.Command,Runtime.exec,subprocess,child_process,Process(),NSTask - Network calls:
http.Get,http.Post,URLSession,fetch,axios,net.Dial - Obfuscation:
base64,eval,exec,atob, dynamic code generation
5b. Dependency Audit
- Go: Review
go.mod— look for unknown modules, excessive deps, or suspicious packages - Swift: Review
Package.swiftdependencies — verify all git URLs are legitimate repos - Node: Check
package.json+package-lock.jsonfor supply chain risks - Python: Check
requirements.txt/pyproject.tomlfor pinned versions and known vulns
5c. Data Flow Analysis
Trace where data goes:
- Inbound: What permissions/API keys does the tool require?
- Storage: Where does it persist data? (local DB, files, cloud?)
- Outbound: What servers does it contact? Are they user-initiated or background?
- Exfiltration risk: Does any code send user data to unexpected endpoints?
5d. Language-Specific Checks
- Rust:
unsafe_codepolicy in Cargo.toml, TLS choice (rustls vs openssl), input sanitization in exec/shell paths - Go:
exec.Commandusage, HTTP server exposure, CGO usage (go-sqlite3= native code) - Python: dependency pinning, sandboxing, subprocess usage
- Node: eval usage, dependency audit, env variable handling
- Swift:
Process()(NSTask) shell execution,URLSessionnetwork calls, keychain access, Accessibility API usage
Layer 6 — Issues & PRs Reality Check
Fetch issues via web_extract on https://api.github.com/repos/OWNER/REPO/issues?state=open&per_page=50. Compare "open issues" count from repo metadata vs actual issues returned. Issues-disabled repos still show a count that includes PRs.
Layer 7 — Releases & Maturity
Fetch releases via web_extract on https://api.github.com/repos/OWNER/REPO/releases. No releases = proof-of-concept, not production-ready.
Layer 8 — ML/AI Model Legitimacy Verification
When the repo claims to release an ML model (especially foundation models, fine-tuned LLMs, or financial/timeseries models), verify the weights are REAL — not just config dummies or LFS pointer stubs.
8a. Hugging Face Model Audit
- Hit
https://huggingface.co/api/models/ORG/MODEL— check:siblingslist,downloads,likes - Models with zero downloads + zero likes + recent creation = red flag
- Critical pitfall: Hugging Face API returns
size: 0for all LFS-tracked files (likemodel.safetensors). This is normal — LFS pointers are tiny text files pointing to the real binary. Do NOT flag "0 byte model" as a red flag — download the actual file to verify. - Download the safetensors file via
https://huggingface.co/ORG/MODEL/resolve/main/model.safetensorsand check actual byte size withwc -c
8b. Parameter Count Verification
For safetensors models, read the raw header WITHOUT torch dependency (see references/safetensors-inspection.md):
curl -sL "https://huggingface.co/ORG/MODEL/resolve/main/model.safetensors" -o /tmp/model.safetensors
python3 references/safetensors-inspection.md # or inline the script
- Expected:
total_params ≈ claimed_params(±1% tolerance for embedding/bias mismatches) - For fp32 models:
file_size_bytes ≈ claimed_params × 4(e.g., 24.7M params ≈ 94-99 MB) - For fp16 models:
file_size_bytes ≈ claimed_params × 2
8c. Weight Distribution Sanity Check
Trained weights should show:
- Mean near 0 (not 0.5, not 1.0 — those suggest random init or bugs)
- Std dev in 0.02-0.30 range (not 0.001 — dead weights; not 50+ — exploding)
- No tensors that are all-zeros or all-identical
- No extreme outliers (>50σ from mean)
- The output head/projection layers often have wider spread than internal layers — this is normal for trained models
Red flags for fake/dummy weights:
- All weights exactly 0 or exactly 1 — not trained
- Perfect uniform distribution — random init, not trained
- File is only config JSON with no actual tensor data (1-2 KB total)
8d. Academic Paper Verification
For repos claiming a paper:
- Search arXiv:
https://arxiv.org/abs/XXXX.XXXXX— does paper exist? - Verify venue claims via DBLP:
https://dblp.org/search/publ/api?q=TITLE - Check Semantic Scholar:
https://api.semanticscholar.org/graph/v1/paper/ArXiv:XXXX.XXXXX?fields=citationCount,publicationVenue - Verify authors are real researchers (Google Scholar profiles, university affiliations)
- Cross-reference: does the GitHub author name match the paper's first author?
8e. Training Code Reality Check
- Is there actual training/pre-training code, or only inference wrappers?
- Many academic repos release weights + inference but keep training pipeline closed — note this honestly
- Complete absence of any training code while claiming "open-source model" = partial openness
Output Format
Structure the report as:
- Verified Stats — what the numbers actually say
- Architecture & Structure — code organization, tech stack
- Protocol/Design — how it works internally
- Issues Analysis — what kind of problems exist
- Security Assessment — positives and concerns (red/yellow/green flags)
- License & Open Source — is it legally usable?
- Maintenance Outlook — will it be updated?
- Hype vs Substance — honest verdict
- Risk Summary Table — tool × risk level × key concern matrix
Layer 9 — Business Model & Marketing Funnel Detection
When the repo is an "awesome list" or curated collection, trace the money:
- Check FUNDING.yml — does the repo accept sponsorships?
- Scan README for product banners (LaunchKit, SaaS, paid services)
- Map the org ecosystem — do they own multiple "awesome-*" repos funneling to a paid product?
- Watch for "Request private X" CTAs — paid service disguised as community feature
- Read CONTRIBUTING.md — does it actually accept external PRs, or are contributions blocked?
- AI-speak detection — files with "theatre-like darkness", "radical subtraction", "chiaroscuro" are AI-generated, not hand-curated
- Preview gap — do claimed files (preview.html) actually exist in the repo, or only on the monetized website?
- Auth routes on companion site — sign-in flows indicate a SaaS product behind the curtain
Flag pattern: "awesome list → product funnel" is a legitimate growth strategy but label it as marketing, not community altruism.
Layer 10 — Comparison Audit
When the user asks "compare against what we have," benchmark the third-party repo against the user's equivalent toolkit:
- Identify the user's equivalent capability (Stitch MCP, internal pipeline, etc.)
- Load the relevant skill for the user's tool to get current capabilities
- Build a comparison table: Nature, Creator, Output, Customization, Integration, Ownership, Business Model, Pricing, Risks
- Render a verdict: complementary (use both), substitutive (pick one), or inferior (skip)?
⚠️ PITFALL — Category Error in Comparison. The most common failure: comparing form without understanding substance. Impeccable inspects rendered DOM (visual output); building a regex source-code scanner and calling it "the Flutter equivalent" is a category error. When the third-party tool operates at a different abstraction layer than your equivalent, state that honestly. Don't force-fit the comparison.
⚠️ PITFALL — Adversarial validation before building. After a comparison audit concludes with a "gap," the natural reflex is to build the equivalent immediately. Run a Light 2-Round adversarial consultation (see multi-model-consultation skill) before building. The consultation will catch whether you're building the right tool or just copying the form. Battle-tested: Flutter Design Anti-Patterns audit (2026-07-11) — consultation redirected from 31 regex patterns to 3 custom_lint rules.
Table template and real example in references/comparison-audit-template.md.
Pitfalls
- High star count ≠ quality (viral drops can hit 100K+ stars in days)
- "Source-available" ≠ "open source" (no license = all rights reserved)
- Disabled issues = controlled narrative, not community-driven
- 2-3 contributors = bus factor of 1, high abandonment risk
- Compare age (days since creation) to stars for hype ratio
- GitHub API rate limits (60/hr unauthenticated) — fall back to web_search when hit
- Hardcoded API keys in source may be public demo keys — not always a real secret
- Third-party protocol libraries may violate platform ToS even if code is clean
- "Is it real?" is the most common deep-dive intent — prioritize Layers 1 (stats), 3 (commits), 6 (issues), and 8 (model verification). Skip security-heavy Layer 5 unless the repo is a dev tool the user might install.
- Hugging Face API returns 0-byte sizes for LFS files — this is normal. Download to verify real size.
- When API tools are unavailable, use terminal with curl, saving to temp files before processing
- AI skills repos: see
references/ai-skills-ecosystem-audit.md— Claude/Cursor/Codex marketplace repos are predominantly markdown, not software. File-type composition is the #1 signal. - Single-dominant-contributor (>70% commits) = solo project regardless of listed contributor count. Check distribution, not headline numbers.
What ships with it: 4 files
11.9 KB alongside SKILL.md