RepoTrust

Leaderboard github.com

AgriciDaniel/claude-blog

Free, open source blog writer for Claude Code. Researches current sources, writes answer-first posts for Google and AI answers, has an independent reviewer score each one out of 100 and ships only after five delivery gates. 32 skills, 30 /blog commands, 5 agents. Active development at AI-Marketing-Hub/claude-blog; public releases ship here.

  • View repository ↗
  • Python
  • ★ 2,747
  • commit 4f9c2cb8fd17
  • scored 2026-11-14
  • scoring prov-4+qual-2+sec-2

AI provenance

81%

explicit

Confidence
95%
Coverage
100%

Estimated share of AI-generated code. Explicit attribution is a lower bound.

Code quality

64/100

weak

Confidence
90%
Coverage
100%

Complexity, duplication, lint density, tests, CI, docs and review process.

Security

81/100

adequate

Confidence
85%
Coverage
100%

Secrets, static analysis, vulnerable dependencies, CI and supply-chain posture.

Scores

Pillar Score Signal Confidence Coverage
AI provenance (estimated AI-generated share) 81 explicit 95% 100%
Code quality 64 weak 90% 100%
Security 81 adequate 85% 100%

AI provenance

Explicit AI attribution on 81% of first-party code added; an estimated 81% including velocity signals.

  • Explicitly attributed share (lower bound): 81.3%
  • Unattributed share in AI-consistent velocity bursts: 3.2%
  • Estimated AI-generated share: 81.3%
AI tool Attributed commits Lines added
Claude Code 170 61,728
OpenAI Codex 6 3,523
  • AI tooling configured in repo: claude-code, generic-agent

Current source lines last changed by AI-attributed commits: 25,078 of 30,535.

Findings per 1,000 lines AI-attributed Other Ratio
Quality 2.074 2.566 0.81x
Security 0.678 0.55 1.23x
  • Stylometry index: 1.77 per 1,000 lines (narrated steps 0, placeholders 0, assistant phrasing 0, emoji 108). Reported as a signal, not scored.
Month Lines added Attributed to AI
2026-02 2,482 100%
2026-03 8,931 100%
2026-04 1,634 100%
2026-05 7,605 76%
2026-07 27,632 100%
2026-08 2,019 0%
2026-10 29,915 63%

Evidence

  • Claude Code: trailer 'Co-Authored-By: Claude' (b6dfd985cf3b)
  • Claude Code: trailer 'Co-Authored-By: Claude' (245c6a2026e3)
  • Claude Code: trailer 'Co-Authored-By: Claude' (2581a9bc8057)
  • Claude Code: trailer 'Co-Authored-By: Claude' (6255affdd5de)
  • Claude Code: trailer 'Co-Authored-By: Claude' (e17453eca8c3)
  • Claude Code: trailer 'Co-Authored-By: Claude' (309e004d7b46)
  • Claude Code: trailer 'Co-Authored-By: Claude' (295b4b7d74bd)
  • Claude Code: trailer 'Co-Authored-By: Claude' (2791ee0fabad)
  • Claude Code: trailer 'Co-Authored-By: Claude' (6f2d815ab257)
  • Claude Code: trailer 'Co-Authored-By: Claude' (320665fe2da4)
  • Claude Code: trailer 'Co-Authored-By: Claude' (5ceac4cc086a)
  • Claude Code: trailer 'Co-Authored-By: Claude' (f0480af5f174)
  • Claude Code: trailer 'Co-Authored-By: Claude' (c34368da5317)
  • Claude Code: trailer 'Co-Authored-By: Claude' (93469c4d48cd)
  • Claude Code: trailer 'Co-Authored-By: Claude' (4a5bc401d31d)

AI provenance describes how code was produced; it is not a quality judgment. Unless attribution is explicit, these are signals consistent with AI generation, not proof. Squash/rebase workflows, imported code, and rewritten history reduce accuracy.

Code quality

Code quality is weak: test-to-source ratio 0.71, CI runs tests; 35% of function code in complex or long functions; 6% duplicated lines. Weakest area: type safety.

Area Score
Complexity (lizard) 35
Duplication 69
Code smells (Opengrep) 50
Tests and CI 90
Documentation 100
Type safety 0
Process (Scorecard review/maintenance) n/a
  • Functions: 907; mean complexity 6.7, 90th percentile 15; 80 complex and 23 long functions
  • Duplicated lines: 6.3% of 24,176 compared
  • Tests: 21,770 test lines for 30,535 source lines (ratio 0.71); CI test commands: pytest; 59% of recent source commits also change tests
  • Docs missing or thin: none

Most complex functions:

Security

Security posture is adequate: 5 known vulnerabilities in 3 dependencies; 14 high-severity SAST findings. Weakest area: ci actions.

Area Score
Secrets (gitleaks, tree + history) 94
Static analysis (Opengrep) 83
Vulnerable dependencies (OSV) 73
CI workflows (zizmor) 70
Posture (policy, updates, signing, lockfiles) 80
OpenSSF Scorecard n/a
  • Known vulnerabilities: 5 in 3 packages (critical 0, high 3, medium 2, low 0)

  • Posture checks passed: security policy, dependency updates; missing: signed commits, lockfiles

Top findings

Severity Finding Location
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] .github/scripts/validate_plugin_tolerate_reserved_name.py:192
high opengrep/python.lang.security.use-defused-xml: The Python documentation recommends using defusedxml instead of xml because the native Python xml library is vulnerable to XML External Entity (XXE) attacks. These attacks can leak confidential data and "XML bombs" can cause denial of service. [confidence low] scripts/check_google_currentness.py:12
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] scripts/check_secrets.py:98
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] skills/blog-audio/scripts/run.py:111
high opengrep/python.lang.security.audit.dangerous-subprocess-use-tainted-env-args: Detected subprocess function 'run' with user controlled data. A malicious actor could leverage this to perform command injection. You may consider using 'shlex.quote()'. [confidence medium] skills/blog-audio/scripts/run.py:111
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] skills/blog-audio/scripts/setup_environment.py:80
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] skills/blog-google/scripts/run.py:121
high opengrep/python.lang.security.audit.dangerous-subprocess-use-tainted-env-args: Detected subprocess function 'run' with user controlled data. A malicious actor could leverage this to perform command injection. You may consider using 'shlex.quote()'. [confidence medium] skills/blog-google/scripts/run.py:121
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] skills/blog-google/scripts/setup_environment.py:77
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] skills/blog-notebooklm/scripts/run.py:116
high opengrep/python.lang.security.audit.dangerous-subprocess-use-tainted-env-args: Detected subprocess function 'run' with user controlled data. A malicious actor could leverage this to perform command injection. You may consider using 'shlex.quote()'. [confidence medium] skills/blog-notebooklm/scripts/run.py:116
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] skills/blog-notebooklm/scripts/setup_environment.py:85
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] skills/blog-notebooklm/scripts/setup_environment.py:100
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] skills/blog-notebooklm/scripts/setup_environment.py:216
high osv/GHSA-3jp2-3mrg-2vxc: oauthlib@4.0.0 (PyPI) is affected by GHSA-3jp2-3mrg-2vxc uv.lock
high osv/GHSA-6655-6qjp-jx7x: soupsieve@2.10 (PyPI) is affected by GHSA-6655-6qjp-jx7x uv.lock
high osv/GHSA-mmhr-3c5m-f64f: soupsieve@2.10 (PyPI) is affected by GHSA-mmhr-3c5m-f64f uv.lock
medium opengrep/python.lang.security.audit.insecure-file-permissions: These permissions 0o700 are widely permissive and grant access to more people than may be necessary. A good default is 0o644 which gives read and write access to yourself and read access to everyone else. [confidence medium] scripts/blog_preflight.py:182
medium opengrep/python.lang.security.audit.insecure-file-permissions: These permissions 0o700 are widely permissive and grant access to more people than may be necessary. A good default is 0o644 which gives read and write access to yourself and read access to everyone else. [confidence medium] scripts/blog_preflight.py:376
medium opengrep/python.lang.security.audit.dynamic-urllib-use-detected: Detected a dynamic value being used with urllib. urllib supports 'file://' schemes, so a dynamic value controlled by a malicious actor may allow them to read arbitrary files. Audit uses of urllib calls to ensure user data cannot control the URLs, or consider using the 'requests' library instead. [confidence low] scripts/check_google_currentness.py:39
medium opengrep/python.lang.security.audit.regex_dos: Detected usage of re.compile with an inefficient regular expression. This can lead to regular expression denial of service, which can result in service down time. Instead, check all regexes or use safer alternatives such as pyre2. [confidence low] scripts/cognitive_load.py:110
medium opengrep/python.lang.security.audit.dynamic-urllib-use-detected: Detected a dynamic value being used with urllib. urllib supports 'file://' schemes, so a dynamic value controlled by a malicious actor may allow them to read arbitrary files. Audit uses of urllib calls to ensure user data cannot control the URLs, or consider using the 'requests' library instead. [confidence low] skills/blog-google/scripts/google_auth.py:449
medium opengrep/python.lang.security.audit.dynamic-urllib-use-detected: Detected a dynamic value being used with urllib. urllib supports 'file://' schemes, so a dynamic value controlled by a malicious actor may allow them to read arbitrary files. Audit uses of urllib calls to ensure user data cannot control the URLs, or consider using the 'requests' library instead. [confidence low] skills/blog-google/scripts/google_auth.py:674
medium osv/GHSA-mf5v-w3w3-f6cg: opentelemetry-api@1.45.1 (PyPI) is affected by GHSA-mf5v-w3w3-f6cg uv.lock
medium osv/GHSA-7g44-g9rc-x53w: soupsieve@2.10 (PyPI) is affected by GHSA-7g44-g9rc-x53w uv.lock

Static signals only: the scorer never runs the project's code. Secret findings are pattern matches that were not verified, and secret values are never stored.

Repository profile

  • Source lines: 30,535; test lines: 21,770
Language Lines
Python 50,257
PowerShell 1,614
Shell 434

Embed a badge

Maintainers can show these in a README. Badges update when the repository is re-scored.

[![RepoTrust ai](https://repotrust.synapticcyber.com/badge/github.com/AgriciDaniel/claude-blog/ai.svg)](https://repotrust.synapticcyber.com/r/github.com/AgriciDaniel/claude-blog/)
[![RepoTrust quality](https://repotrust.synapticcyber.com/badge/github.com/AgriciDaniel/claude-blog/quality.svg)](https://repotrust.synapticcyber.com/r/github.com/AgriciDaniel/claude-blog/)
[![RepoTrust security](https://repotrust.synapticcyber.com/badge/github.com/AgriciDaniel/claude-blog/security.svg)](https://repotrust.synapticcyber.com/r/github.com/AgriciDaniel/claude-blog/)