THE single skill to publish profitable, rejection-proof skills to the Capafy marketplace end-to-end, verification-baked. Load this one skill and you can: pick a proven-profitable niche, generate the skill, write a best-practice listing, publish it (CP1 card + CP2 LLM-key host + CP3 submit) via the CloakBrowser daily-driver, and verify it (linter + browser + remote-status). Use for ANY Capafy publishing. This skill VENDORS the Capafy CLIs internally — never invoke capafy-publisher / capafy-user directly; everything routes through here.
Resources
8Install
npx skillscat add daisuke134/life-manager/capafy-autopublish Install via the SkillsCat registry.
capafy-autopublish — one skill, full Capafy publishing + verification
★ This is the ONLY Capafy skill to invoke. ★ It vendors the Capafy seller CLI
(vendor/capafy-publisher) and the market-search CLI (vendor/capafy-user).
Other Claude instances: do NOT use those two directly — use this skill.
What sells on Capafy vs what does not (read first)
Capafy has two agent types:
- run_online (cloud_hosted, subscription): the buyer CHATS with the skill in a
sandbox — only the model + what the buyer pastes. NO web, tools, accounts,
browser, files, or cron. Sellable test: "Does the buyer get full value by
chatting, from model + pasted input alone?" YES → sellable.- ✅ humanizer, copywriter, slide-maker (HTML), data-analyst (pasted data), strategist
- ❌ photo-publisher, auto-poster, scheduler, "researches the web/competitors"
(sandbox can't act on the world or browse → useless / gets REJECTED, see C4).
- download (buyout, one-time): the buyer runs the package in THEIR own env — can
include tools/browser. (The auto-publisher itself could be sold this way, not run_online.)
We publish run_online subscription skills that are sandbox-complete and copy a
proven winner's pricing/structure verbatim.
Canonical publish flow (verification-baked)
Use the split, 0.9.11-compatible flow:
scripts/publish_prepare.sh <skill-dir> <LISTING.md> <icon.png>
→ `AGENT_ID` + `EDIT_URL_FILE` / CP1_AGENTIC.md + cp1_agent.py (agentic card confirmation)
→ scripts/publish_finish.sh <agent-id> <skill-name> <LISTING.md>The sequence is Phase A discovery → confirmed selection/init → CP1 →
ordinary publish-submit --action prepare → strict same-Agent security_ready
readback → publish-submit --action continue_upload exactly once → final review
page CP2 → the same or refreshed publish review page CP3 exactly once → official
remote verify → ledger. Fail closed at every step:
the finish wrapper requires is_confirmed_skills=true, validates the same Agent ID and
final review URL, polls CP2 config readback, and exits 0 only onplatform_status=1 ∧ is_confirmed_config_keys=true.
The deterministic wrapper never invents deep-scan findings or retries an uncertain
upload; a creator-approved agentic deep scan is outside this wrapper and must
complete before returning to ordinary prepare.
scripts/publish_one.sh is a legacy unsupported/reference-only no-op shim. Do not
invoke it; use the split flow above.
The browser opens only the exact URL read from EDIT_URL_FILE; do not reconstruct or
print it. After the split flow prints ✅, you still do the browser render check yourself
(HARD 0.31/0.38), then commit+push the ledger.
Verification policy (verification is mandatory — anything unverified is slop)
- lint_listing.py (embedded, every publish, fail-closed) — rejection-proof:
blocks overclaim phrases (browse/scrape/fetch/live/real-time/retrieval/posts/
sends/.pptx/guaranteed/undetectable…) unless negated, and enforces title≤50 /
short≤500 / pricing table. This is the C4-rejection learning, made deterministic. - VCSDD adversary (
vcsdd:vcsdd-adversary) — spawn for RISKY listings only
(anything the linter can't judge: subtle retrieval/tool/guarantee claims). Pure
writing skills can skip it. - browser + remote-status (me, every publish) — render check + publish-remote-status
real data (status=1 ∧ cfg=1 ∧ run_online ∧ title ∧ model ∧ pricing).
How to add ONE new listing (the repeatable recipe)
- Pick a winner:
vendor/capafy-user/scripts/capafy_http.py POST /agent/agents/search
(X-Access-Token header) → find a proven seller; GET/agent/agent/agents/<id>for its
pricing/category/structure. Copy facts verbatim; write original words. The paid-only policy
below overrides any winner free-trial field. - Build the skill under
$LIFE_MANAGER_REPO/skills/<name>/(pure-LLM, sandbox-complete,
honest; no web/tool/account claims). Addtest/case1.md. Grep for leaks (CLEAN). - Write the listing
$LIFE_MANAGER_STATE_HOME/features/capafy-<name>/LISTING.mdwith the
header (Primary Model / category / tags), a pricing table copied from the winner withNo Free Trialon every plan, and## Title / ## shortDescription / ## welcomeMessage / ## detailedDescription. - Icon: OpenAI image_generation (
CAPAFY_HOST_OPENAI_KEY) → 512px PNG. - Lint:
scripts/lint_listing.py <LISTING.md>until PASS. - (risky only) spawn VCSDD adversary → require PASS.
- Publish: run
scripts/publish_prepare.sh <skill-dir> <LISTING.md> <icon>,
complete CP1 fromCP1_AGENTIC.md/cp1_agent.py, then runscripts/publish_finish.sh <agent-id> <skill-name> <LISTING.md>→ status=1. - Browser-verify + record in
state/published.jsonl+ commit+push.
Hard-won rules (full detail in PUBLISHING_RUNBOOK.md)
- WE COPY: winner's price/cap/category/structure verbatim; every plan uses
No Free Trial. - LEAK GUARD: publish from clean WS
$LIFE_MANAGER_STATE_HOME/work/capafy(skill only), never LIVE. - LLM host (CP2): OpenRouter
anthropic/claude-sonnet-4.6, formatopenai-responses,
keyCAPAFY_HOST_OPENROUTER_KEY; delete any blockrun/localhost card. - CP1 15 gotchas baked into
cp1_agent.py(RHF element.fill, real mouse clicks,
unique title, 下書き persist, monetization heading-click, Subscription scroll, provider
field, per-plan trial = No Free Trial, On-Demand, DPA checkbox, price-tab SVG green,
get_by_text form-mount, anchored Add Plan). See RUNBOOK §"NEW-AGENT CP1". - Cap: max 5 unlisted (status 0-3) at once; publish-init fails when full. status=4 frees a slot.
- Browser: CloakBrowser daily-driver (CDP :9222), never close it (HARD 0.39).
Folder map
capafy-autopublish/
├── SKILL.md (this) · BEST_PRACTICES.md · PUBLISHING_RUNBOOK.md
├── scripts/ publish_prepare.sh · publish_finish.sh · daily_loop.sh
│ · select_publish_agent.py · build_publish_selection.py
│ · save_review_url.py
│ · lint_listing.py
│ · build_config.py · cp1_agent.py
│ · drive_checkpoint2.py · drive_checkpoint3.py · niche_picker.py · logo_gen.js
├── vendor/ capafy-publisher/ (packager.py = Capafy seller CLI, self-updating)
│ capafy-user/ (capafy_http.py = market search CLI)
└── state/ published.jsonl (ledger)Canonical copy lives in $LIFE_MANAGER_REPO/skills/capafy-autopublish; no repo-external skill mirror is an execution source.