Agent Economy Report

Skill code audit

CAUTION version 1.1.1 · audited 2026-09-17

code-analysis-skills @wscats

This package is a local Git-history reflection/statistics tool. It enforces a consent gate in code: without --i-have-consent it refuses to run, and by default it only analyzes the current local Git user; multi-author runs require an explicit opt-in and listed authors. The analysis path reads local repositories and writes Markdown/HTML/JSON/PDF reports, with no evidence of exfiltration, hidden network calls, persistence, or payment redirection. The main concerns are not malicious: the reporters appear to reference stale data keys (evaluations, slacking) that the current code no longer creates, so reflection and cadence sections may be missing, and HTML/PDF rendering carries a disclosed escaping/resource risk. A separate publish.sh script can publish to ClawHub if executed, but it is not part of analysis. Users should review whether per-developer timestamp and work-pattern data is acceptable for their environment.

Declared purposeGit-history reflection tool for self-introspection. Self-scope by default; multi-author analysis requires explicit, per-person consent. Not for HR / ranking / surveillance use.
Observed behaviorThe CLI requires --i-have-consent, defaults to self-scope using local git config user.name/user.email, and refuses multi-author analysis unless --multi-author-team-retro and at least one --consented-author are supplied. It scans local Git repos, computes commit-pattern, work-habit, efficiency, style, quality, and cadence metrics, then writes reports. The analysis runtime makes no network calls, but the optional publish.sh script can upload the skill to ClawHub. Current reporter code reads some data under old keys, so reflection and cadence sections may not render.
Verdict, rules onlyCAUTION · runs subprocesses or eval/exec
Verdict, AICAUTION
Final verdictCAUTION (never better than either pass)

Capabilities

capabilityvs purposedetail
filesystem_readneededScans local Git repositories and traverses commit history with GitPython and PyDriller to compute per-author metrics.
filesystem_writeneededWrites report files in Markdown, JSON, HTML, and PDF formats to the local output path.
shellneededsrc/main.py line 96 runs `git -C <repo> config --get` via subprocess with fixed arguments to identify the current Git user.
networkexceeds purposeNo network calls occur in the analysis path. The package also contains publish.sh, which invokes `clawhub publish` if run, reaching ClawHub.
otherneededProcesses sensitive per-developer Git activity data, including commit timestamps, weekend/late-night ratios, ownership, and cadence signals.

Findings

severityfinding
infoDeclared refusal instruction
This is explicit, on-topic skill policy intended to prevent HR, surveillance, and non-consensual use.
SKILL.md:56 The agent **must refuse** the request when any of the above is unclear, and
infoConsent gate enforced in runtime
Without an explicit consent acknowledgement, run_analysis returns a refusal report and does not analyze repositories.
src/main.py:189 if not acknowledge_usage_policy:
infoDefault is self-scope mode
In this branch, analysis is restricted to the local Git user identity; other authors are skipped.
src/main.py:121 if not multi_author_team_retro:
infoMulti-author opt-in requires named authors
When multi_author_team_retro is true but no consented_authors are supplied, the run is refused.
src/main.py:138 if not consented_authors:
infoInvokes git config through subprocess
Runs local `git config --get` with fixed arguments to resolve the self identity. This is narrow shell execution and needed for self-scope.
src/main.py:96 out = subprocess.run(
lowComputes late-night work-pattern ratio
The tool extracts sensitive per-developer timing statistics, including weekend and late-night ratios. This is declared and consent-gated, but it is a privacy-relevant capability users should review.
src/analyzers/work_habit_analyzer.py:120 late_night_ratio = round(late_night_count / total, 3) if total else 0
infoReflection data is stored under `reflections`
The current orchestrator stores the narrated reflection output under the `reflections` key.
src/main.py:285 repo_metrics["reflections"] = narrator.narrate(
lowMarkdown reporter reads old `evaluations` key
Because the current code writes `reflections` at src/main.py line 285, the reflection narrative section may be empty or omitted.
src/reporters/markdown_reporter.py:116 ev = repo_metrics.get("evaluations", {}).get(author, {})
infoCadence data is stored under `cadence_signals`
The current analyzer output is stored under the `cadence_signals` key.
src/main.py:275 "cadence_signals": cadence_signal_analyzer.analyze(),
lowMarkdown reporter reads old `slacking` key
The reporter looks for `slacking`, but the current code writes `cadence_signals` at src/main.py line 275, so cadence component values may not be rendered.
src/reporters/markdown_reporter.py:151 sd = repo_metrics.get("slacking", {}).get(author, {})
mediumKnown HTML/PDF rendering risk disclosed
The package's own skill card states that report-rendering risks exist for HTML and PDF outputs.
skill-card.md:33 Risk: Report-rendering risks are noted for HTML and PDF outputs.
mediumAdvised mitigation for rendering risk
Users are advised to prefer Markdown or JSON until HTML escaping and PDF resource restrictions are fixed.
skill-card.md:35 Mitigation: Prefer Markdown or JSON output until HTML escaping and PDF resource restrictions are fixed.
lowHTML template rendered without shown autoescaping
Repo names, author names, and consent filters from Git data are interpolated in this template; no explicit autoescape=True is shown, so Git-controlled strings could inject HTML/JavaScript if autoescaping is not active.
src/reporters/html_reporter.py:345 template = Template(HTML_TEMPLATE)
lowOptional publisher script can upload to ClawHub
If executed, publish.sh uses the ClawHub CLI and network to publish the package. This is not required for local analysis.
publish.sh:65 clawhub publish "${SKILL_PATH}" \

0 AI finding(s) were dropped because their file, line or quote did not match the package.

Network destinations in the code

domainservice ratingwhere
clawhub.ainot in the service indexREADME.md:170
github.comnot in the service indexREADME.md:101
img.shields.ionot in the service indexREADME.CN.md:3
www.python.orgnot in the service indexREADME.CN.md:3

Other facts

Binaries invokedbash, git, npm, pip, python
Environment variables readBASH_SOURCE, CHANGELOG, NAME, OWNER, SCRIPT_DIR, SKILL_PATH, SLUG, TAGS, VERSION
Hard-coded walletsnone
Pipes a download to a shell0
eval / exec / subprocess3
base64 blobs0
File writes18
Persistence0

Files audited

filelinessha256
README.CN.md229658e6ce37ba6c683…
README.EN.md23864f9e917ceee8ed9…
README.md1740362218a3abbf1eb…
SKILL.cn.md285fe582d0293731484…
SKILL.md375b4ec534d9bbf9117…
_meta.json69bcba2e10533d48b…
publish.sh730d2ead2b9ef4a48e…
pyproject.toml2788ef60d94808f310…
pytest.ini69024eb52b07a0ae4…
references/metrics-guide.md151fb6ef6cc564484d4…
requirements.txt8155a16d803560aa0…
skill-card.md5701387c55b8bcc2ac…
skill.yaml1454656963991543fe3…
src/__init__.py113890eb0a6a1a991…
src/analyzers/__init__.py1069c9675177ab2a4…
src/analyzers/base_analyzer.py1107c30fe7e3c422bc7…
src/analyzers/cadence_signal_analyzer.py231c89e952e22478476…
src/analyzers/code_quality_analyzer.py199e7d2adb32fcc276f…
src/analyzers/code_style_analyzer.py168e8066fb2c2c71c8d…
src/analyzers/commit_analyzer.py118df6be02a3b5a44bb…
src/analyzers/efficiency_analyzer.py193276976a0f453d26b…
src/analyzers/work_habit_analyzer.py200f5a4818c97d6c798…
src/main.py5115ad3270ed425ef43…
src/narrator/__init__.py1f4ec6585cf168155…
src/narrator/reflection_narrator.py3920b829757ef9c92e6…
src/reporters/__init__.py1ad219ca24982c438…
src/reporters/base_reporter.py23e0cc9421eab8735f…
src/reporters/html_reporter.py34646b40b8f813ca36c…
src/reporters/json_reporter.py29f97e59d1f472a054…
src/reporters/markdown_reporter.py2705e7bba108dff56c1…
src/reporters/pdf_reporter.py37390b485bcc262daa9…
src/scanner.py15638b705b65834d0c3…
src/utils/__init__.py1d239548b903d4254…
src/utils/helpers.py49f405727d82af3b04…
tests/__init__.py15a4ef7228eb6275e…
tests/test_analyzers.py101c939f2e686db1462…
tests/test_scanner.py78deae14f6f8a92f79…

For agents

JSON: https://agenteconomy.report/k/code-analysis-skills.audit.json · badge: https://agenteconomy.report/k/code-analysis-skills.audited.svg · skill rating: /k/code-analysis-skills · commission an audit of any skill: US$ 29 per version.

How this is computed

The complete published package of this exact version was downloaded from the registry and read statically; nothing was executed. A deterministic pass extracts network destinations, binaries, environment variables, writes, install commands, obfuscation markers, subprocesses and wallets, each with file and line. An AI then reads the whole package with those facts and writes the summary, the capabilities and the findings under a strict schema; every finding it produces must cite a file, a line and the exact text, or it is dropped. The final verdict is the worst of the two passes. The audit does not change the skill's trust tier (policy); the author may respond through the dispute channel and the response is published here. Commissioned by: the Agent Economy Report (free program: the 150 most downloaded skills, September 2026).