Agent Economy Report

Skill code audit

CAUTION version 1.2.10 · audited 2026-09-17

university-applications @wscats

This package is published under the slug "university-applications" but actually installs a Chinese astrology and fortune-telling skill. Its Node.js and Python scripts compute BaZi, ZiWei, QiMen, LiuYao, marriage, feng shui, and daily fortune content, and they store user birth/family data locally under data/profiles. The only network path seen is an optional browser page that asks the user for an API key and sends the hexagram and question to one of three hard-coded LLM endpoints after a consent prompt. Daily push is opt-in and writes local outbox and log files; no payment logic, wallet code, or hidden exfiltration was observed. There are documentation inconsistencies and sensitive local data handling, so a careful user should review before installing.

Declared purposeDeclared purpose is an all-in-one Chinese astrology/fortune-telling skill (BaZi, ZiWei, QiMen, MeiHua, LiuYao, marriage, feng shui, daily fortune) for cultural reference only. The registry slug is "university-applications", which does not match the stated content.
Observed behaviorThe package contains local Node.js and Python scripts that read and write JSON profiles under data/profiles, compute divination and astrology output, and write push logs and outbox files. A standalone browser page, liuyao/index.html, can optionally send the user's question and hexagram to a user-selected LLM endpoint using a user-provided API key, with consent prompts. No payment or wallet functionality and no hidden outbound calls from the Node/Python scripts were observed.
Verdict, rules onlyCAUTION · touches persistence (cron, shell profile, autostart)
Verdict, AICAUTION
Final verdictCAUTION (never better than either pass)

Capabilities

capabilityvs purposedetail
networkneededliuyao/index.html can POST to a user-selected LLM endpoint via fetch (line 1239). SKILL.md lines 37-39 allow only api.openai.com, api.anthropic.com, and api.deepseek.com, and the supplied Node/Python scripts are local-only.
browserneededliuyao/index.html provides a browser interface for coin shaking, hexagram display, and optional LLM interpretation; API key entry and consent UI are in the browser.
filesystem_readneededScripts read local user profiles under data/profiles, such as daily-push.js loading all JSON profile files (line 515) and profile.js reading user JSON files.
filesystem_writeneededScripts write profiles, push logs, and outbox payloads. Example: daily-push.js line 604 writes JSON payloads to files with mode 0600.
credentialsneededAn optional user-provided LLM API key can be entered in liuyao/index.html and sent as an Authorization header (line 1238). No bundled credential was found.
persistenceneededProfiles, preference-learning logs, push opt-in settings, push logs, and outbox files persist locally; push is opt-in via push-toggle.js.
shellneededThe skill uses Node.js and Python CLI commands documented in SKILL.md lines 281-323, and npm scripts in package.json.
install_packagesneededpackage.json depends on iztro 2.5.8; package-lock.json resolves normal npm registry packages.

Findings

severityfinding
mediumRegistry slug does not match skill contents
The published slug is "university-applications", but the package declares itself as "命理大师" in SKILL.md and performs Chinese astrology/fortune-telling. This unrelated name may mislead users browsing by slug.
_meta.json:3 "slug": "university-applications",
mediumSkill stores sensitive birth and family data locally
The skill saves birth date/time/place, name, optional family member information, interaction topics, and push logs under data/. This is local-only by design, but includes sensitive personal data.
SKILL.md:8 【数据与隐私提示】本 skill 会在本地文件系统保存用户主动提交的出生年月日时、地点、
mediumOptional browser network call to third-party LLM provider
If the user enters an API key and confirms the consent dialog, the page sends the hexagram and question to the selected provider via fetch. The dropdown is limited to OpenAI, Anthropic, and DeepSeek endpoints.
liuyao/index.html:1239 const resp=await fetch(`${apiBase}/chat/completions`,{
mediumUser-provided API key sent in Authorization header
The user-entered LLM API key is sent with the request. This is optional and user-supplied at runtime, but the key is transmitted to the selected third-party endpoint.
liuyao/index.html:1238 const headers={'Content-Type':'application/json','Authorization':`Bearer ${userCred}`};
infoDeveloper file path in image source
The page attempts to load an image from the author's local machine path, which will not load for other users. No remote image or data is fetched.
liuyao/index.html:652 src="/Users/apple/Documents/雪儿/雪儿头像.jpg"
infoUnexpected environment variable read
Although SKILL.md line 30 says env: [] and that the skill no longer reads any environment variables, marriage.js reads OPENCLAW_OWNER_ID to authorize local profile access. This is a documentation mismatch; the variable is used as an access gate, not for exfiltration.
scripts/marriage.js:415 const ownerEnv = process.env.OPENCLAW_OWNER_ID || '';
infoDocumentation says daily-push prints to stdout
The skill says daily-push.js outputs via console.log() for the OpenClaw runtime, but daily-push.js line 604 writes JSON payload files under data/outbox for delivery instead. This is a meaningful behavior difference for data handling.
SKILL.md:372 - `daily-push.js`:纯本地计算,生成运程文本后通过 `console.log()` 输出,由 OpenClaw cron 运行时负责投递给用户
lowFull personalized push content written to local outbox
In live mode, a JSON payload containing the generated fortune is written locally with mode 0600. It is local but contains personalized fortune content.
scripts/daily-push.js:604 fs.writeFileSync(outFile, JSON.stringify(payload, null, 2), { encoding: 'utf8', mode: 0o600 });

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

Network destinations in the code

domainservice ratingwhere
api.anthropic.comnot in the service indexSKILL.md:38
api.deepseek.comnot in the service indexSKILL.md:39
api.openai.comnot in the service indexREADME.md:86
clawhub.ainot in the service indexskill-card.md:9
fonts.googleapis.comnot in the service indexSKILL.md:44
locize.comnot in the service indexpackage-lock.json:40
registry.npmjs.orgnot in the service indexpackage-lock.json:20
www.i18next.comnot in the service indexpackage-lock.json:48
www.w3.orgnot in the service indexliuyao/index.html:557

Other facts

Binaries invokedbash, curl, git, node, npm, python, python3, wget
Environment variables readELEMENT_BI, ELEMENT_KE, ELEMENT_SHENG, GAN_ELEMENT, JSON, OPENCLAW_OWNER_ID, REG_SHOW_FULL, SHOW_FULL, TOPICS, YAO_NAMES
Hard-coded walletsnone
Pipes a download to a shell0
eval / exec / subprocess0
base64 blobs0
File writes20
Persistence10

Files audited

filelinessha256
README.md203884f2ead8259c159…
SKILL.md4758b5572d47819a3a8…
_meta.json63968d90d3e8a1a25…
data/profiles/template.json106abb89ae6c7aafce5…
liuyao/index.html13286e12b83a92bd6546…
package-lock.json8470da3fc46485d021…
package.json6555862e0b68eb4259…
references/astrology-framework.md56e20b7a36125731a2…
references/bazi-framework.md88c395f8f11a73d6f2…
references/chinese-methods.md144ed83b337b19ae61e…
references/dao-mysticism-framework.md58724a6ebd8d131663…
references/dressing-framework.md149bf4321b302253b64…
references/fengshui-and-timing-framework.md114eeeac969f832f62e…
references/intake-and-routing.md172515f1fad3501a303…
references/naming-framework.md154354b26df77226b39…
references/numerology-framework.md643b42e40c21d67b5e…
references/output-templates.md383a793e25e4510cdff…
references/palmistry-framework.md1355ad7b0c0a7e18285…
references/physiognomy-framework.md157a21db240fb2b29b1…
references/preparation.md1157763d2274d996794…
references/qimen-calculation-rules.md110409b76f0ce6a0215…
references/qimen-framework.md90a7a70996a72c8c21…
references/qimen-interpretation-guide.md93ec608c1547698380…
references/relationship-and-timing.md93cd48fda8c67f47a6…
references/safety-and-ethics.md88d0b78be6a1fb1ff9…
references/tarot-framework.md95be0cc0bffb0caec3…
references/western-methods.md82e967e8253a358651…
references/yijing-divination-framework.md117f80b7dbff246dcaf…
references/ziwei-framework.md637883faf25c230e45…
scripts/bazi-analysis.js546c882375af46c09a1…
scripts/daily-fortune.js25528a924931043a302…
scripts/daily-push.js856e2313804dc2c6391…
scripts/feixing.py229f5efe5aac3536dc5…
scripts/fengshui.js404c4a93ac90e6957b6…
scripts/jieqi.js1350e7c329337ad0cf9…
scripts/liuyao.js334ed58787b4bca5828…
scripts/marriage.js458566b698588a8ae8f…
scripts/meihua.js305f52b2243f891649a…
scripts/preference-tracker.js2873be43601578a5235…
scripts/profile.js51400c5306f0a3f97bf…
scripts/push-toggle.js381ef6c78f0a0607acb…
scripts/qimen.js357b6807e3cbfbd96e3…
scripts/register.js429f768c0e42b0aeb47…
scripts/zhuanshi.js656d854eff588235cb9…
scripts/ziwei.js1554b127539ddc085001…
skill-card.md7442b15a0c9095d99f…

The package exceeded the reading budget; the AI saw a truncated copy. The deterministic pass covered every text file.

For agents

JSON: https://agenteconomy.report/k/university-applications.audit.json · badge: https://agenteconomy.report/k/university-applications.audited.svg · skill rating: /k/university-applications · 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).