RepoTrust

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.

https://github.com/AgriciDaniel/claude-blog · commit 4f9c2cb8fd17 · scored 2026-11-14 · scoring prov-4+qual-2+sec-2

RepoTrust ai badge RepoTrust quality badge RepoTrust security badge

Dispute this score or request a re-score Full report JSON

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.

AI tool Attributed commits Lines added
Claude Code 170 61,728
OpenAI Codex 6 3,523

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
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

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

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

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: [email protected] (PyPI) is affected by GHSA-3jp2-3mrg-2vxc uv.lock
high osv/GHSA-6655-6qjp-jx7x: [email protected] (PyPI) is affected by GHSA-6655-6qjp-jx7x uv.lock
high osv/GHSA-mmhr-3c5m-f64f: [email protected] (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: [email protected] (PyPI) is affected by GHSA-mf5v-w3w3-f6cg uv.lock
medium osv/GHSA-7g44-g9rc-x53w: [email protected] (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

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/)