CAUTION version 1.2.10 · audited 2026-09-17
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 purpose | Declared 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 behavior | The 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 only | CAUTION · touches persistence (cron, shell profile, autostart) |
| Verdict, AI | CAUTION |
| Final verdict | CAUTION (never better than either pass) |
| capability | vs purpose | detail |
|---|---|---|
| network | needed | liuyao/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. |
| browser | needed | liuyao/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_read | needed | Scripts 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_write | needed | Scripts write profiles, push logs, and outbox payloads. Example: daily-push.js line 604 writes JSON payloads to files with mode 0600. |
| credentials | needed | An 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. |
| persistence | needed | Profiles, preference-learning logs, push opt-in settings, push logs, and outbox files persist locally; push is opt-in via push-toggle.js. |
| shell | needed | The skill uses Node.js and Python CLI commands documented in SKILL.md lines 281-323, and npm scripts in package.json. |
| install_packages | needed | package.json depends on iztro 2.5.8; package-lock.json resolves normal npm registry packages. |
| severity | finding |
|---|---|
| medium | Registry 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", |
| medium | Skill 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 会在本地文件系统保存用户主动提交的出生年月日时、地点、 |
| medium | Optional 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`,{ |
| medium | User-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}`}; |
| info | Developer 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" |
| info | Unexpected 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 || ''; |
| info | Documentation 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 运行时负责投递给用户 |
| low | Full 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.
| domain | service rating | where |
|---|---|---|
| api.anthropic.com | not in the service index | SKILL.md:38 |
| api.deepseek.com | not in the service index | SKILL.md:39 |
| api.openai.com | not in the service index | README.md:86 |
| clawhub.ai | not in the service index | skill-card.md:9 |
| fonts.googleapis.com | not in the service index | SKILL.md:44 |
| locize.com | not in the service index | package-lock.json:40 |
| registry.npmjs.org | not in the service index | package-lock.json:20 |
| www.i18next.com | not in the service index | package-lock.json:48 |
| www.w3.org | not in the service index | liuyao/index.html:557 |
| Binaries invoked | bash, curl, git, node, npm, python, python3, wget |
| Environment variables read | ELEMENT_BI, ELEMENT_KE, ELEMENT_SHENG, GAN_ELEMENT, JSON, OPENCLAW_OWNER_ID, REG_SHOW_FULL, SHOW_FULL, TOPICS, YAO_NAMES |
| Hard-coded wallets | none |
| Pipes a download to a shell | 0 |
| eval / exec / subprocess | 0 |
| base64 blobs | 0 |
| File writes | 20 |
| Persistence | 10 |
| file | lines | sha256 |
|---|---|---|
README.md | 203 | 884f2ead8259c159… |
SKILL.md | 475 | 8b5572d47819a3a8… |
_meta.json | 6 | 3968d90d3e8a1a25… |
data/profiles/template.json | 106 | abb89ae6c7aafce5… |
liuyao/index.html | 1328 | 6e12b83a92bd6546… |
package-lock.json | 84 | 70da3fc46485d021… |
package.json | 65 | 55862e0b68eb4259… |
references/astrology-framework.md | 56 | e20b7a36125731a2… |
references/bazi-framework.md | 88 | c395f8f11a73d6f2… |
references/chinese-methods.md | 144 | ed83b337b19ae61e… |
references/dao-mysticism-framework.md | 58 | 724a6ebd8d131663… |
references/dressing-framework.md | 149 | bf4321b302253b64… |
references/fengshui-and-timing-framework.md | 114 | eeeac969f832f62e… |
references/intake-and-routing.md | 172 | 515f1fad3501a303… |
references/naming-framework.md | 154 | 354b26df77226b39… |
references/numerology-framework.md | 64 | 3b42e40c21d67b5e… |
references/output-templates.md | 383 | a793e25e4510cdff… |
references/palmistry-framework.md | 135 | 5ad7b0c0a7e18285… |
references/physiognomy-framework.md | 157 | a21db240fb2b29b1… |
references/preparation.md | 115 | 7763d2274d996794… |
references/qimen-calculation-rules.md | 110 | 409b76f0ce6a0215… |
references/qimen-framework.md | 90 | a7a70996a72c8c21… |
references/qimen-interpretation-guide.md | 93 | ec608c1547698380… |
references/relationship-and-timing.md | 93 | cd48fda8c67f47a6… |
references/safety-and-ethics.md | 88 | d0b78be6a1fb1ff9… |
references/tarot-framework.md | 95 | be0cc0bffb0caec3… |
references/western-methods.md | 82 | e967e8253a358651… |
references/yijing-divination-framework.md | 117 | f80b7dbff246dcaf… |
references/ziwei-framework.md | 63 | 7883faf25c230e45… |
scripts/bazi-analysis.js | 546 | c882375af46c09a1… |
scripts/daily-fortune.js | 255 | 28a924931043a302… |
scripts/daily-push.js | 856 | e2313804dc2c6391… |
scripts/feixing.py | 229 | f5efe5aac3536dc5… |
scripts/fengshui.js | 404 | c4a93ac90e6957b6… |
scripts/jieqi.js | 135 | 0e7c329337ad0cf9… |
scripts/liuyao.js | 334 | ed58787b4bca5828… |
scripts/marriage.js | 458 | 566b698588a8ae8f… |
scripts/meihua.js | 305 | f52b2243f891649a… |
scripts/preference-tracker.js | 287 | 3be43601578a5235… |
scripts/profile.js | 514 | 00c5306f0a3f97bf… |
scripts/push-toggle.js | 381 | ef6c78f0a0607acb… |
scripts/qimen.js | 357 | b6807e3cbfbd96e3… |
scripts/register.js | 429 | f768c0e42b0aeb47… |
scripts/zhuanshi.js | 656 | d854eff588235cb9… |
scripts/ziwei.js | 1554 | b127539ddc085001… |
skill-card.md | 74 | 42b15a0c9095d99f… |
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.
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).