AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Plan Export

skill-zwjbendn-weight-loss-skill-plan-export · by zwjbendn

Convert Markdown plans to styled HTML web pages (hosted on cloud storage with presigned URLs) or PDFs, and deliver them to users. Supports weight loss plans (PLAN.md) and meal plans (MEAL-PLAN.md) with different HTML templates. Trigger when: (1) weight-loss-planner finishes generating PLAN.md, (2) meal-planner finishes generating MEAL-PLAN.md, (3) any time a Markdown document should be delivered…

No reviews yet
0 installs
18 views
0.0% view→install

Install

$ agentstack add skill-zwjbendn-weight-loss-skill-plan-export

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-zwjbendn-weight-loss-skill-plan-export)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
6mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Plan Export? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Plan Export (HTML Web / PDF)

> ⚠️ SILENT OPERATION: Never narrate internal actions, skill transitions, or tool calls to the user. No "Let me check...", "Now I'll transition to...", "Reading your profile...". Just do it silently and respond with the result.

Convert Markdown plans into professionally styled documents and deliver them to users.

Primary mode: HTML web page uploaded to cloud storage — generates a beautiful, mobile-friendly web page and provides a presigned URL (valid 7 days).

Fallback mode: PDF via Slack file upload — used when cloud storage is not configured.

Supported Document Types

| Type | Input File | Template | Key | HTML Script | |---|---|---|---|---| | Weight Loss Plan | PLAN.md | (default) | weight-loss-plan | generate-html.py | | Meal Plan | MEAL-PLAN.md | meal-plan | meal-plan | generate-meal-plan-html.py |

Primary Mode: HTML + Cloud Storage Presigned URL

Storage Backend (Auto-Detected)

The upload script automatically detects the storage backend:

  1. PLAN_STORAGE_BACKEND env var (aws or jdoss) — force a specific backend
  2. JD_OSS_ACCESS_KEY is set → JD Cloud OSS
  3. aws sts get-caller-identity succeeds → AWS S3
  4. None detected → error

AWS S3 prerequisites:

  • S3 bucket with 30-day lifecycle rule (auto-deletion)
  • AWS CLI credentials with s3:PutObject + s3:GetObject permission
  • Default bucket: nanorhino-im-plans (us-west-1)

JD Cloud OSS prerequisites:

  • Environment variables: JD_OSS_ACCESS_KEY, JD_OSS_SECRET_KEY, JD_OSS_ENDPOINT
  • Default bucket: JD_OSS_BUCKET env var, or override with --bucket

How to Use

# Weight loss plan
URL=$(bash {baseDir}/scripts/generate-and-send.sh \
  --agent  \
  --input PLAN.md \
  --bucket  \
  --username  \
  --workspace  \
  --key weight-loss-plan)

# Meal plan
URL=$(bash {baseDir}/scripts/generate-and-send.sh \
  --agent  \
  --input MEAL-PLAN.md \
  --bucket  \
  --username  \
  --workspace  \
  --template meal-plan \
  --key meal-plan)

Parameters:

  • --agent (required): Your agent ID (e.g., 007-zhuoran)
  • --input (required): Path to the Markdown file
  • --bucket (required for HTML mode): Storage bucket name. For JD OSS, falls back to JD_OSS_BUCKET env var if omitted. For AWS, defaults to nanorhino-im-plans.
  • --username (required for HTML mode): User identifier for the S3 key path. Auto-detect from workspace path: if it matches workspace-wechat-dm-{id}, use {id}; otherwise use the agent ID (e.g., 007-zhuoran)
  • --workspace (optional): Agent workspace path — if provided, writes plan-url.json there
  • --template (optional): meal-plan for meal plan HTML. Omit for default (weight loss plan).
  • --key (required for HTML mode): Document key, used in both S3 path and plan-url.json (e.g., weight-loss-plan, meal-plan)

The script outputs the public URL to stdout. You are responsible for sending this URL to the user using the message tool (works with any channel: Slack, Telegram, etc.).

After Sending

Tell the user their plan is ready and include the link. Example:

> "你的计划已经生成好了!点击这里查看:[链接] 📄 有什么问题随时问我!"

When PLAN.md or MEAL-PLAN.md is Updated

Whenever a plan file is modified by any skill, always re-run the upload script to push the new version to cloud storage. The file is uploaded to the same S3 key ({username}/{key}.html), so the public URL stays the same. You only need to send the link once; subsequent updates are reflected automatically at the same URL.

plan-url.json (Multi-Document)

When --workspace and --key are provided, the script writes/merges into plan-url.json:

{
  "weight-loss-plan": {
    "url": "https://nanorhino.ai/zhuoran/weight-loss-plan.html",
    "uploaded_at": "2026-03-09T04:15:00Z"
  },
  "meal-plan": {
    "url": "https://nanorhino.ai/zhuoran/meal-plan.html",
    "uploaded_at": "2026-03-09T07:00:00Z"
  }
}

Each key is updated independently — uploading a new meal plan doesn't affect the weight loss plan entry.

When a user asks for their plan link:

  1. Read plan-url.json → find the relevant key
  2. Send the existing url — URLs are permanent (no expiry)
  3. If the plan content has been updated since last upload, re-run the script to push the new version (URL stays the same)

Fallback Mode: PDF via Slack

When --bucket is NOT provided, the script falls back to PDF generation and Slack file upload:

bash {baseDir}/scripts/generate-and-send.sh \
  --agent  \
  --input PLAN.md \
  --message "📋 这是你的体重管理计划" \
  --filename "体重管理计划.pdf"

Individual Scripts (Advanced)

Generate HTML only (weight loss plan)

python3 {baseDir}/scripts/generate-html.py  [output.html]

Generate HTML only (meal plan)

python3 {baseDir}/scripts/generate-meal-plan-html.py  [output.html]

The meal plan script expects Markdown in the schema defined at meal-planner/references/meal-plan-schema.md.

Generate PDF only

bash {baseDir}/scripts/generate-pdf.sh  [output.pdf]

Upload to cloud storage only

bash {baseDir}/scripts/upload-to-s3.sh \
  --file  \
  --bucket  \
  --username  \
  --key  \
  [--workspace ] \
  [--base-url ]

Send file to Slack only (legacy)

bash {baseDir}/scripts/send-to-slack.sh --agent  --file  [--message ] [--filename ]

Notes

  • Weight loss plan HTML: blue theme, tables, Inter + Noto Sans SC fonts
  • Meal plan HTML: green theme, day-card layout, responsive, print-friendly
  • PDF mode uses WeasyPrint (Python) — no Chrome/browser dependency
  • All formats support Chinese, English, and mixed-language content
  • Cloud storage objects: set lifecycle rule on bucket for auto-cleanup (optional)
  • Public URLs are permanent ({base-url}/{username}/{key}.html), served via Cloudflare Worker
  • Same S3 key is overwritten on each upload — URL stays stable
  • Agent-to-Slack-user mapping (PDF fallback) is auto-resolved from openclaw.json bindings

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.