6.2 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Overview
Claude Code marketplace plugin providing AI-powered content generation skills. Skills use Gemini Web API (reverse-engineered) for text/image generation and Chrome CDP for browser automation.
Architecture
skills/
├── baoyu-gemini-web/ # Core: Gemini API wrapper (text + image gen)
├── baoyu-xhs-images/ # Xiaohongshu infographic series (1-10 images)
├── baoyu-cover-image/ # Article cover images (2.35:1 aspect)
├── baoyu-slide-deck/ # Presentation slides with outlines
├── baoyu-article-illustrator/ # Smart illustration placement
├── baoyu-post-to-x/ # X/Twitter posting automation
└── baoyu-post-to-wechat/ # WeChat Official Account posting
Each skill contains:
SKILL.md- YAML front matter (name, description) + documentationscripts/- TypeScript implementationsprompts/system.md- AI generation guidelines (optional)
Running Skills
All scripts run via Bun (no build step):
npx -y bun skills/<skill>/scripts/main.ts [options]
Examples:
# Text generation
npx -y bun skills/baoyu-gemini-web/scripts/main.ts "Hello"
# Image generation
npx -y bun skills/baoyu-gemini-web/scripts/main.ts --prompt "A cat" --image cat.png
# From prompt files
npx -y bun skills/baoyu-gemini-web/scripts/main.ts --promptfiles system.md content.md --image out.png
Key Dependencies
- Bun: TypeScript runtime (via
npx -y bun) - Chrome: Required for
baoyu-gemini-webauth andbaoyu-post-to-xautomation - No npm packages: Self-contained TypeScript, no external dependencies
Authentication
baoyu-gemini-web uses browser cookies for Google auth:
- First run opens Chrome for login
- Cookies cached in data directory
- Force refresh:
--loginflag
Plugin Configuration
.claude-plugin/marketplace.json defines plugin metadata and skill paths. Version follows semver.
Adding New Skills
IMPORTANT: All skills MUST use baoyu- prefix to avoid conflicts when users import this plugin.
- Create
skills/baoyu-<name>/SKILL.mdwith YAML front matter- Directory name:
baoyu-<name> - SKILL.md
namefield:baoyu-<name>
- Directory name:
- Add TypeScript in
skills/baoyu-<name>/scripts/ - Add prompt templates in
skills/baoyu-<name>/prompts/if needed - Register in
marketplace.jsonplugins[0].skills array as./skills/baoyu-<name> - Add Script Directory section to SKILL.md (see template below)
Script Directory Template
Every SKILL.md with scripts MUST include this section after Usage:
## Script Directory
**Important**: All scripts are located in the `scripts/` subdirectory of this skill.
**Agent Execution Instructions**:
1. Determine this SKILL.md file's directory path as `SKILL_DIR`
2. Script path = `${SKILL_DIR}/scripts/<script-name>.ts`
3. Replace all `${SKILL_DIR}` in this document with the actual path
**Script Reference**:
| Script | Purpose |
|--------|---------|
| `scripts/main.ts` | Main entry point |
| `scripts/other.ts` | Other functionality |
When referencing scripts in workflow sections, use ${SKILL_DIR}/scripts/<name>.ts so agents can resolve the correct path.
Code Style
- TypeScript throughout, no comments
- Async/await patterns
- Short variable names
- Type-safe interfaces
Image Generation Guidelines
Skills that require image generation MUST delegate to available image generation skills rather than implementing their own.
Image Generation Skill Selection
- Check available image generation skills in
skills/directory - Read each skill's SKILL.md to understand parameters and capabilities
- If multiple image generation skills available, ask user to choose preferred skill
Generation Flow Template
Use this template when implementing image generation in skills:
### Step N: Generate Images
**Skill Selection**:
1. Check available image generation skills (e.g., `baoyu-gemini-web`)
2. Read selected skill's SKILL.md for parameter reference
3. If multiple skills available, ask user to choose
**Generation Flow**:
1. Call selected image generation skill with:
- Prompt file path (or inline prompt)
- Output image path
- Any skill-specific parameters (refer to skill's SKILL.md)
2. Generate images sequentially (one at a time)
3. After each image, output progress: "Generated X/N"
4. On failure, auto-retry once before reporting error
Output Path Convention
Generated images from the same skill and source file MUST be grouped together:
With source file (e.g., /path/to/project/content/my-article.md):
/path/to/project/content/my-article/<skill-suffix>/
- Remove file extension from source filename
- Use skill name suffix (e.g.,
xhs-images,cover-image,slide-deck) - Example: source
/tests-data/anthropic-economic-index.md+ skillbaoyu-xhs-images→/tests-data/anthropic-economic-index/xhs-images/
Without source file:
./<skill-suffix>/<source-slug>/
- Place under current project directory
- Use descriptive slug for the content
Directory Backup:
- If output directory already exists, rename existing directory with timestamp
- Format:
<dirname>-backup-YYYYMMDD-HHMMSS - Example:
xhs-images→xhs-images-backup-20260117-143052
Image Naming Convention
Image filenames MUST include meaningful slugs for readability:
Format: NN-{type}-[slug].png
NN: Two-digit sequence number (01, 02, ...){type}: Image type (cover, content, page, slide, illustration, etc.)[slug]: Descriptive kebab-case slug derived from content
Examples:
01-cover-ai-future.png
02-content-key-benefits.png
03-page-enigma-machine.png
04-slide-architecture-overview.png
Slug Rules:
- Derived from image purpose or content (kebab-case)
- Must be unique within the output directory
- 2-5 words, concise but descriptive
- When content changes significantly, update slug accordingly
Best Practices
- Always read the image generation skill's SKILL.md before calling
- Pass parameters exactly as documented in the skill
- Handle failures gracefully with retry logic
- Provide clear progress feedback to user