- Skill ID
- starchild-ai-agent/official-skills/community-publish
- Publisher
- starchild-ai-agent
- Repository
- official-skills
- Installs
- 0
- Files
- 7
- Synced
- Sep 23, 2026
Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.
starchild-ai-agent/official-skills/community-publishInstalls these files- SKILL.md
- __init__.py
- exports.py
- lib/gateway.py
- lib/install.py
- lib/manifest.py
- lib/validate.py
What this skill tells the agent
Two concepts: PUBLISH vs LIST — never confuse them
This skill handles two fundamentally different concepts. Mixing them up is the #1 source of wrong answers.
| Concept | What it means | Functions |
|---|---|---|
| PUBLISH (发布) | Make something accessible — a URL works, or code is on GitHub | publish_preview, unpublish_preview, list_published_previews, open_source, remove_open_source, list_open_source, get_open_source, fork, validate_open_source |
| LIST (上架) | Make something discoverable/purchasable on the marketplace | Free: list_in_dashboard, unlist_from_dashboard, delete_listing, get_listing_status<br>Paid: create_paid_service, submit_for_review, get_review_status, publish_service, unpublish_service, list_my_services, get_service, update_service, delete_service, restore_service<br>Cover: upload_cover_image<br>Browse + consumer: explore_services, get_service_detail, get_service_pricing, get_service_reviews, write_service_review, favorite_service, unfavorite_service, get_favorite_services, get_user_services, get_service_earnings, get_earnings_summary, get_service_tags, get_featured_services<br>Projects query: explore_projects, my_projects, favorite_projects, get_tab_counts, get_popular_tags, get_user_projects, favorite_project, unfavorite_project |
Publishing does NOT auto-list. publish_preview() only allocates the URL. open_source() only pushes code. Neither makes the project discoverable on the marketplace — that requires a separate, deliberate LIST call.
Listing has two flows
| Flow | When to use | Review? | Pricing? | Functions |
|---|---|---|---|---|
| Free listing | Free project, show on /projects gallery | No | No | list_in_dashboard() |
| Paid listing | Charge for access via x402 | Required (6-check review, must pass before publishing) | Yes (USDC/USDG/USDC(Solana) on platform networks — default Base+Monad+Robinhood+X Layer+Solana, follows all) | create_paid_service() → submit_for_review() (required) → publish_service() |
`POST /api/services` no longer accepts `service_type: "free_project"`. Free listing is done bylist_in_dashboard()(the project gallery flow). Paid listing usescreate_paid_service()+ review + publish (the service API flow).
Limited-time free promo ≠ this skill
After a paid service is listed, the owner may run a time-window free promotion (free_promo_start / free_promo_end). That is not marketplace listing work and is not implemented here.
| Concept | What it is | Where |
|---|---|---|
| Free listing | Free project on /projects gallery | this skill → list_in_dashboard() |
free_trial_count | N free calls before charge (pay_per_use only) | this skill → create_paid_service(..., free_trial_count=N) |
| Limited-time free promo | Calendar window: amount-0 verify, no settle/debit | x402 skill → skills/x402/references/selling.md section Limited-time free promotion |
If the user asks to “开限时免费 / free promo / free for N days” on an already-paid listing: read the x402 skill (self-check P1–P5, then PUT free-promo). Do not invent APIs in community-publish or confuse it with free_trial_count.
Visibility model — read this before answering "can others see it?"
A project's "publicness" is three orthogonal switches, not one:
| Switch | Off state | On state | Flipped by |
|---|---|---|---|
| URL access | Visiting the URL returns 404 | URL works for anyone who has the link | publish_preview / unpublish_preview |
| Gallery discoverability | Not on /projects gallery | Appears in the gallery | list_in_dashboard / unlist_from_dashboard |
| Marketplace listing | Not on the Service Marketplace | Discoverable + purchasable | create_paid_service + publish_service / unpublish_service |
A project can be in any combination. Never collapse these into "is it public yet".
Status questions are read-only operations. Whenever the user asks:
- "is it visible / public / discoverable yet?"
- "上架了吗 / 在 dashboard 上吗 / 别人能看到吗"
- "is the listing live?"
The authoritative answer comes ONLY from a fresh get_listing_status(slug) (free) or get_review_status(service_id) (paid) call. Do NOT infer from past actions.
Project types — three only
| type | What it is | Eligible for publish_preview()? |
|---|---|---|
task | Scheduled cron/interval job | No (no HTTP port) |
service | Long-running HTTP service (dashboard, API, page) | Yes |
script | One-shot script | No (no HTTP port) |
Routing — match user intent to the right action
A. Status intents — user wants to know current state
| Sample phrasing | Action |
|---|---|
| "is it visible / public / discoverable / live?" | get_listing_status(slug) |
| "上架了吗 / 在 dashboard 上吗 / 别人能不能看到" | get_listing_status(slug) |
| "what URLs do I have published?" / "我发布了哪些" | list_published_previews() |
| "what's open-sourced?" / "都有哪些开源代码" | list_open_source(...) |
| "我的服务" / "my services" / "我的付费服务" | list_my_services() |
| "审核状态" / "审核通过了吗" / "review status" | get_review_status(service_id) |
B. Action intents — user wants to change state
| Sample phrasing | Action | Notes |
|---|---|---|
| "publish" / "share" / "make public" / "公开" / "发布" (no qualifier) | publish_preview(preview_id) | Allocates the URL only. Listing is NOT auto-flipped. |
| "list on the dashboard" / "上架" / "show on community" / "make discoverable" / "发到广场" | list_in_dashboard(slug) | Free listing. Requires the preview to already exist. |
| "上架付费服务" / "make this a paid service" / "上架到服务市场(付费)" | create_paid_service(...) → submit_for_review() (recommended) → publish_service() | Paid listing. Needs x402 config first. |
| "publish AND list" / "发布并上架" | publish_preview() THEN list_in_dashboard() | Two separate calls in order. |
| "remove from dashboard" / "下架" / "unlist" / "hide from gallery" | unlist_from_dashboard(slug) | Free listing only. Soft-unlist (sets is_public=false, review_status='unlisted', preserves stats). Preview URL stays alive. |
| "下架付费服务" / "unpublish service" | unpublish_service(service_id) | Paid listing only. |
| "open source" / "open-source the code" / "开源代码" | open_source(project_dir) | Pushes code to GitHub. Does NOT list. |
| "unpublish the URL" / "take down the link" / "停止服务" | unpublish_preview(slug) | Stops the preview container service only. Does NOT affect listing state (is_public/review_status unchanged). URL becomes inaccessible (404). |
| "remove the open source" / "delete from GitHub" | remove_open_source(slug) | |
| "fork" / "install someone's project" | fork(source) | |
| "提交审核" / "submit for review" | submit_for_review(service_id) | Paid only. Required — must pass before publishing |
| "发布服务" / "publish my service" | publish_service(service_id) | Paid only, requires approved or unlisted state |
| "更新服务" / "update service" | update_service(service_id, ...) | Paid only |
| "删除服务" / "delete service" | delete_service(service_id) | Paid only |
| "删除项目" / "delete listing" / "permanently remove from marketplace" | delete_listing(slug) | Free listing only. Permanently deletes the listing row AND the community_slugs record. URL becomes inaccessible (404). Removes from both explore and my-projects. Use unlist_from_dashboard() to hide without deleting. |
| Ambiguous after rereading | Ask one question | "你是要 (a) 发布公开 URL,(b) 免费上架到广场,(c) 付费上架到服务市场,还是 (d) 开源代码?" |
Cross-link via publisher: binding
When the same project has BOTH a public URL AND open-sourced code, you want them paired so the frontend renders "View Source" on the listing card and "Visit Live Demo" on the code card. This skill drives that pairing through one explicit binding in project.yaml.
How to declare the binding
Add a publisher: block to project.yaml:
More from starchild-ai-agent
Use this skill in a project
Open any RiverX project, search the Skills panel for starchild-ai-agent/official-skills/community-publish, and install it in one click.
