Atlas / Skills / jimliu / baoyu-skills

baoyu-skillsBLOCK

skills/jimliu/baoyu-image-cards
Verdict
BLOCK
Grade
F
Trust score
47 /100
Version
1.1.0
Hosts
5 documented
License
MIT
Stars
27,018
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

English | 中文

Skills shared by Baoyu for improving daily work efficiency with AI Agents (Claude Code, Codex, etc.).

Prerequisites

  • Node.js environment installed
  • Ability to run npx bun commands

Installation

Tip: This repository contains 20+ skills. Install only the ones you actually need — bulk-installing every skill adds unnecessary context overhead for your AI agent on every run.

Quick Install (Recommended)

npx skills add jimliu/baoyu-skills

Codex Project-Level Install

If you only need a subset of skills in one project, you do not need to install the full plugin. Codex scans .agents/skills inside a project, so copy or symlink each needed skill as a full directory:

/.agents/skills/baoyu-cover-image/SKILL.md
/.agents/skills/baoyu-article-illustrator/SKILL.md
/.agents/skills/baoyu-post-to-wechat/SKILL.md

For a WeChat Official Account article workflow, the usual minimal set is:

  • baoyu-cover-image
  • baoyu-article-illustrator
  • baoyu-post-to-wechat

You do not need to install baoyu-markdown-to-html separately. baoyu-post-to-wechat already includes the Markdown to WeChat-ready HTML conversion flow. Install baoyu-format-markdown only if you need to first turn raw text or drafts into structured Markdown articles with titles, summaries, headings, bold text, lists, and similar formatting.

Place WeChat API credentials according to the scope you want:

  • User-level: ~/.baoyu-skills/.env
  • Project-level: /.baoyu-skills/.env

Project-level .env files are useful when credentials should apply only to the current project. Do not commit them to Git.

Publish to ClawHub / OpenClaw

This repository now supports publishing each skills/baoyu-* directory as an individual ClawHub skill.

# Preview what would be published
./scripts/sync-clawhub.sh --dry-run

# Publish all changed skills from ./skills
./scripts/sync-clawhub.sh -
Read from source at commit ae9966d431c4OBSERVED · 2026-10-28
Advertisement
02

Install

Commands as the repository documents them. They are shown, not run.

npx skills add jimliu/baoyu-skills
npx skills add JimLiu/baoyu-design
npx skills add jimliu/baoyu-skills
npx skills add JimLiu/baoyu-design
npm install -g @openai/codex
npm install -g @openai/codex
03

Host compatibility

What the documentation claims. We have not run a compatibility test.

HostStatusNotes
claude-codementioned
claude-desktopmentioned
codexmentioned
cursormentioned
openclawmentioned
04

What it tells the agent

The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.

---
name: baoyu-article-illustrator
description: Analyzes article structure, identifies positions requiring visual aids, generates illustrations with Type × Style × Palette three-dimension approach. Use when user asks to "illustrate article", "add images", "generate images for article", or "为文章配图".
version: 1.117.4
metadata:
  openclaw:
    homepage: https://github.com/JimLiu/baoyu-skills#baoyu-article-illustrator
---

# Article Illustrator

Analyze articles, identify illustration positions, generate images with Type × Style × Palette consistency.

## User Input Tools

When this skill prompts the user, follow this tool-selection rule (priority order):

1. **Prefer built-in user-input tools** exposed by the current agent runtime — e.g., `AskUserQuestion`, `request_user_input`, `clarify`, `ask_user`, or any equivalent.
2. **Fallback**: if no such tool exists, emit a numbered plain-text message and ask the user to reply with the chosen number/answer for each question.
3. **Batching**: if the tool supports multiple questions per call, combine all applicable questions into a single call; if only single-question, ask them one at a time in priority order.

Concrete `AskUserQuestion` references below are examples — substitute the local equivalent in other runtimes.

## Image Generation Tools

When this skill needs to render an image, resolve the backend in this order:

1. **Current-request override** — if the user names a specific backend in the current message, use it.
2. **Saved preference** — if `EXTEND.md` sets `preferred_image_backend` to a backend available right now, use it.
3. **Auto-select** (when the preference is `auto`, unset, or the pinned backend isn't available):
   - **Codex (`imagegen`)** — first, inspect your available-skills / tool inventory. If a skill named `imagegen` is listed, you are running inside Codex and MUST use it: invoke via the `Skill` tool with `skill: "imagegen"`, passing the saved prompt file's content (plus output path and aspect ratio per Codex `imagegen`'s own args). Codex `imagegen` is the official raster backend in that runtime and outranks any non-native skill (e.g., `baoyu-image-gen`) unless the user has explicitly pinned a different `preferred_image_backend`.
   - **Codex via `codex exec` (`codex-imagegen`)** — if the current runtime exposes no native `imagegen` skill but the `codex` CLI is on `PATH` with an active `codex login`, route through `baoyu-image-gen --provider codex-cli` (preferred), or — if baoyu-image-gen is unavailable — invoke the bundled wrapper directly. Details, parameters, and the runtime-discovery procedure live in [references/codex-imagegen.md](references/codex-imagegen.md) — load that file only when this branch is selected.
   - **Cursor (`GenerateImage`)** — if the runtime exposes a native `GenerateImage` tool, you are running inside Cursor and it outranks any non-native skill the same way Codex `imagegen` does. Two hard caveats: (a) it has no aspect-ratio parameter — state the target aspect ratio / dimensions explicitly in the prompt text passed as `description`; (b) it does not accept an output directory — it saves to a tool-managed location, so after generation copy/move the file to the skill's expected output path (e.g., `outputs/.../NN-xxx.png`). Reference images go in `reference_image_paths`.
   - **Other runtime-native tools** — if the runtime exposes a different native image tool (e.g., Hermes `image_generate`), use it the same way.
   - Otherwise, if exactly one non-native backend is installed (e.g., `baoyu-image-gen`), use it.
   - Otherwise (multiple non-native backends with no runtime-native tool), ask the user once — batch with any other initial questions.
4. **If none are available**, tell the user and ask how to proceed.

**⛔ Never substitute SVG, HTML, canvas, or other code-based rendering for raster image generation.** Codex `imagegen`'s own description says it should be used "when the output should be a bitmap asset rather than repo-native code or vector." If you cannot resolve a raster backend via step 3, fall through to step 4 and ask the user — do **not** silently emit SVG, write inline `<svg>` markup, or produce HTML/CSS art as a substitute. This applies even if the article/section seems "diagram-like": the consumer skill calling this rule has already decided that a raster image is what it needs.

**⛔ Never repair rendered text by painting over a generated bitmap.** Do not use ImageMagick, Pillow, Canvas, SVG, HTML/CSS, OCR scripts, or any other programmatic overlay to cover, rewrite, erase, stroke, or replace labels, captions, or any other text inside an already generated illustration. If text is wrong or unclear, regenerate from a corrected prompt, redraw with less or no on-image text, or ask the user which imperfect candidate to keep.

Setting `preferred_image_backend: ask` forces the step-3 prompt every run regardless of available backends. Users change the pinned backend via the `## Changing Preferences` section below.

**Prompt file requirement (hard)**: write each image's full, final prompt to a standalone file under `prompts/` (naming: `NN-{type}-[slug].md`) BEFORE invoking any backend. The backend receives the prompt file (or its content); the file is the reproducibility record and lets you switch backends without regenerating prompts.

Concrete tool names (`imagegen`, `GenerateImage`, `image_generate`, `baoyu-image-gen`) above are examples — substitute the local equivalents under the same rule.

## Batch Generation Policy

After every prompt file for the run has been saved and verified, generate images in batches by default.

Priority order:

1. Use the chosen backend's native batch / multi-task interface if it exists. Each task must keep its own prompt file, output path, aspect ratio, and direct reference images.
2. If no native batch interface exists but the runtime can issue parallel tool calls, dispatch up to `generation_batch_size` images at a time. Default: `4`. An explicit user request in the
05

Trust audit

BLOCKgrade F · trust 47/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)FAIL
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (5 observation(s))
Network
declared (8 observation(s))
Shell
declared (7 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (25)

CRITICALPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
skills/baoyu-post-to-wechat/SKILL.md:170
**`remote-api` method**: WeChat's "公众号设置 → IP 白名单" often limits API access to one or two fixed IPs. If your local machine's IP is not on that list but a cloud server's is, use `remote-api`: all markdo
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
packages/baoyu-md/src/html-builder.ts:9
const value = eval(
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
packages/baoyu-md/src/themes.ts:8
const value = eval(
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHPrompt injection · prompt.credential_read · CWE-94, CWE-1427
skills/baoyu-post-to-wechat/SKILL.md:274
| Access token error | Verify credentials valid and not expired |
Why it matters. asks the agent to read credentials
MEDIUMInventory / provenance · inv.binary · CWE-1104
bun.lockb
bun.lockb
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/baoyu-chrome-cdp/dist/index.cjs:161
const version = await fetchJson(`http://127.0.0.1:${port}/json/version`, { timeoutMs });
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/baoyu-chrome-cdp/dist/index.cjs:275
const version = await fetchJson(`http://127.0.0.1:${port}/json/version`, { timeoutMs });
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/baoyu-chrome-cdp/dist/index.cjs:291
const version = await fetchJson(`http://127.0.0.1:${port}/json/version`, { timeoutMs: 5000 });
LOWInventory / provenance · inv.hidden_file · CWE-1104
.releaserc.yml
.releaserc.yml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
packages/baoyu-md/src/images.ts:118
const hash = createHash("md5").update(imagePath).digest("hex").slice(0, 8);
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
skills/baoyu-electron-extract/scripts/main.ts:508
const h = createHash("sha1").update(src).digest("hex").slice(0, 10);
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
skills/baoyu-post-to-wechat/scripts/wechat-extend-config.test.ts:163
"remote_publish_identity_file: /home/me/.ssh/id_ed25519",
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
skills/baoyu-post-to-wechat/scripts/wechat-extend-config.test.ts:164
"remote_publish_known_hosts_file: /home/me/.ssh/known_hosts",
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
skills/baoyu-post-to-wechat/scripts/wechat-extend-config.test.ts:178
assert.equal(resolved.remote_publish_identity_file, "/home/me/.ssh/id_ed25519");
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
skills/baoyu-post-to-wechat/scripts/wechat-extend-config.test.ts:179
assert.equal(resolved.remote_publish_known_hosts_file, "/home/me/.ssh/known_hosts");
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
skills/baoyu-post-to-wechat/scripts/wechat-remote-publish.test.ts:39
identityFile: "/home/me/.ssh/id_ed25519",
Why it matters. touches a credential store
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/baoyu-fetch/src/adapters/generic/index.ts:2
import { detectInteractionGate } from "../../browser/interaction-gates";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/baoyu-fetch/src/adapters/generic/index.ts:3
import { captureNormalizedPageSnapshot } from "../../browser/page-snapshot";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/baoyu-fetch/src/adapters/generic/index.ts:4
import { convertHtmlToMarkdown } from "../../extract/html-to-markdown";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/baoyu-fetch/src/adapters/hn/index.ts:5
import type { ExtractedDocument } from "../../extract/document";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/baoyu-fetch/src/adapters/hn/index.ts:6
import { collectMediaFromDocument } from "../../media/markdown-media";
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
README.md:1364
HTTP_PROXY=http://127.0.0.1:7890 HTTPS_PROXY=http://127.0.0.1:7890 /baoyu-danger-gemini-web "Hello"
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
README.zh.md:1365
HTTP_PROXY=http://127.0.0.1:7890 HTTPS_PROXY=http://127.0.0.1:7890 /baoyu-danger-gemini-web "你好"
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
pdf-lib, pptxgenjs, sharp, @mozilla/readability, linkedom, turndown, turndown-plugin-gfm, tsx
Why it matters. 8 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
packages/baoyu-fetch/package.json
@mozilla/readability, chrome-launcher, defuddle, jsdom, remark-gfm, remark-parse, turndown, turndown-plugin-gfm
Why it matters. 15 dependency range(s) float
Fix. pin exact versions or ship a lockfile

Gates applied: critical_finding, no_behavioural_pass, undeclared_transfer.

Audited 2026-10-28 · audit v0.4.1 · source sha ae9966d431c4full audit observations/trust-audit/skill/jimliu__baoyu-image-cards.json · Report an issue / request a re-scan
06

Audit history

Every audit this skill has had.

DateSourceVerdictGradeScoreChange
2026-10-28ae9966d431c4BLOCKF47first audit
07

Questions

Is baoyu-image-cards — jimliu/baoyu-skills safe to install?

No — not without reading the findings first. The audit graded it F (47/100) and found 4 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What can baoyu-image-cards — jimliu/baoyu-skills access on my machine?

The audit observed that it reaches the network, runs shell commands and reads or writes files. Each of those is consistent with what it says it does. Secrets in the source: none found.

Which assistants does baoyu-image-cards — jimliu/baoyu-skills work with?

Its documentation mentions claude-code, claude-desktop, codex, cursor and openclaw. That is what the text claims, not a compatibility test we ran.

How current is this page?

The grade is for one exact copy of the source (ae9966d431c4), read on 2026-10-28. The repository is watched, and a new audit runs when it changes — this is the first audit.

Add this badge to your README

Shows this page's audit result and links back to it. It updates when the audit does.

ModelsAtlas audit badge

Markdown
[![ModelsAtlas audit: baoyu-skills](https://modelsatlas.com/skills/jimliu/baoyu-image-cards/badge.svg)](https://modelsatlas.com/skills/jimliu/baoyu-image-cards/)

Not your listing, or something out of date? Claim or update your listing.

Advertisement