ワンクリックで
coral
Publish agents to Coral Marketplace — handles login, manifest generation, and publishing
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Publish agents to Coral Marketplace — handles login, manifest generation, and publishing
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
| name | coral |
| description | Publish agents to Coral Marketplace — handles login, manifest generation, and publishing |
| disable-model-invocation | true |
| allowed-tools | Read, Glob, Grep, Bash(curl *), Bash(open *), Bash(mkdir *), Bash(chmod *), Bash(test *), Bash(git *), Write |
| argument-hint | [login | init [slug] | publish] |
This skill handles the full agent publishing lifecycle for Coral Marketplace: login, manifest generation, and publishing.
Parse $ARGUMENTS to determine which flow to run:
$ARGUMENTS starts with login → run LOGIN flow$ARGUMENTS starts with init → run INIT flow (pass remaining args as suggested slug)$ARGUMENTS starts with publish → run PUBLISH flow$ARGUMENTS is empty → run SMART modeAuto-detect what the user needs and run the appropriate flow(s) in sequence:
Check if credentials exist:
!test -f ~/.coral/credentials.toml && echo "HAS_CREDS" || echo "NO_CREDS"
Check if coral-agent.toml exists in the project:
!test -f coral-agent.toml && echo "HAS_TOML" || echo "NO_TOML"
Decision:
After each flow completes successfully, continue to the next step automatically. The user should be able to go from zero to published in a single /coral invocation.
Read existing credentials if present:
!test -f ~/.coral/credentials.toml && cat ~/.coral/credentials.toml || echo "NO_FILE"
If credentials exist, tell the user they are already logged in and show the stored marketplace URL. Ask if they want to re-authenticate or continue. If they want to continue, skip this flow.
Use this priority:
$CORAL_MARKETPLACE_URL environment variable: !echo "${CORAL_MARKETPLACE_URL:-}"https://marketplace.coralprotocol.aiTell the user:
Opening Coral Marketplace login. To get your API key:
- Log in with your account
- Go to API Keys (account settings)
- Create a new key with the publish scope
- Copy the key — it starts with
coral_and is shown only once
Open the login page in the default browser:
open "<marketplace_url>/auth/login"
If open fails (e.g., headless server), display the URL and ask the user to open it manually.
Use AskUserQuestion to ask the user to paste their API key. The key starts with coral_.
Check format: the key must start with coral_ and be at least 20 characters long.
Test the key against the marketplace:
curl -s -w "\nHTTP_STATUS:%{http_code}" -H "Authorization: Bearer <KEY>" "<marketplace_url>/auth/me"
mkdir -p ~/.coral
Write ~/.coral/credentials.toml:
[default]
api_key = "<validated_key>"
marketplace_url = "<marketplace_url>"
Set restrictive permissions:
chmod 600 ~/.coral/credentials.toml
Tell the user: "Logged in successfully. Credentials saved to ~/.coral/credentials.toml."
If running in smart mode, continue to the next flow.
!test -f coral-agent.toml && echo "EXISTS" || echo "NONE"
If coral-agent.toml already exists, read it and ask the user if they want to:
Read project files to infer agent metadata. Examine the following:
README: Glob for README*, readme* at the project root. Extract project name, description, what the agent does.
Package manifests: Glob for package.json, Cargo.toml, pyproject.toml, go.mod, setup.py, setup.cfg. Extract:
Entry points: Glob for main.py, agent.py, app.py, server.py, index.js, index.ts, main.rs, main.go. These determine the runtime command.
Docker support: Glob for Dockerfile, docker-compose.yml, docker-compose.yaml. If found, consider docker runtime.
MCP capabilities: Grep source files for patterns like resources, tools, tool_refreshing, prompts to infer capabilities.
Git remote: !git remote get-url origin 2>/dev/null || echo ""
Summarize what you found to the user before continuing. Example:
Analyzed your project:
- Detected Python agent with entry point
agent.py- Found README.md with description
- License: MIT (from pyproject.toml)
- Git remote: https://github.com/user/repo
Use AskUserQuestion to collect fields, presenting inferred values as defaults.
Slug (required):
If $ARGUMENTS contains a second word after init (e.g., /coral init my-agent), use it as the suggested slug. Otherwise derive from the project name (lowercase, hyphens instead of spaces/underscores).
Validate the slug:
[a-z0-9]([a-z0-9-]*[a-z0-9])?--)If the user provides an invalid slug, explain why it's invalid and ask again.
Version: Default to version from package manifest, or 0.1.0.
Description: Use README/package description as basis. Ask user to confirm or revise.
Short description: One-line summary for marketplace listing.
License: Default to license from package manifest, or ask.
Developer name: Default to git user name, package author, or ask.
Runtime command: Based on detected entry point. For Python: ["python", "agent.py"]. For Node: ["node", "index.js"]. For Docker: suggest docker runtime with detected image.
Capabilities: Show any inferred capabilities, ask user to confirm. Common values: resources, tools, tool_refreshing, prompts.
Pricing (optional): Ask if the agent is free or paid. If paid, collect min/max price in USD.
Wallet (optional): Ask for Solana wallet address. Can be skipped.
Construct the complete Edition 3 coral-agent.toml. Rules:
edition = 3[agent] with name, version, description, capabilities[marketplace] with slug and short_description[runtimes.*] section[marketplace.price_per_run] if the user set pricing[marketplace.identity] if the user provided a wallet"""...""") for multiline values like readmeWrite the generated TOML to coral-agent.toml in the project root.
Show a summary:
Created
coral-agent.toml:
- Slug:
<slug>- Version:
<version>- Runtime:
<executable or docker>Review the file and edit if needed.
If running in smart mode, continue to the PUBLISH flow.
!test -f coral-agent.toml && echo "FOUND" || echo "MISSING"
If coral-agent.toml is missing:
No
coral-agent.tomlfound in the current directory. Run/coral initto create one, or make sure you're in the right project directory. Stop.
Read the file contents.
Validate these rules locally before making a network request (gives faster feedback):
edition = 3 must be present[agent] must have non-empty name and versionMAJOR.MINOR.PATCH, optional pre-release like -beta)[marketplace] must exist with a non-empty slug[a-z0-9]([a-z0-9-]*[a-z0-9])?, no consecutive hyphens[runtimes.executable] or [runtimes.docker] must existIf validation fails, show ALL errors at once (not one at a time) with fix guidance. Example:
Validation failed:
- Slug
My-Agentis invalid: must be lowercase alphanumeric and hyphens only- Version
1.2is invalid: use semver format like1.2.0Fix these in
coral-agent.tomland run/coral publishagain.
Stop if validation fails.
Show a summary and ask the user to proceed:
Ready to publish to Coral Marketplace:
- Slug:
<slug>- Version:
<version>- Name:
<name>Publish now?
Check in this order:
$CORAL_API_KEY: !echo "${CORAL_API_KEY:-}"test -f ~/.coral/credentials.toml && cat ~/.coral/credentials.toml || echo "NO_CREDS"If CORAL_API_KEY is set and non-empty, use it.
Otherwise, parse ~/.coral/credentials.toml and extract the api_key value from [default].
If no key found:
No API key found. Run
/coral loginto authenticate, or set theCORAL_API_KEYenvironment variable. Stop.
Check in this order:
$CORAL_MARKETPLACE_URL environment variablemarketplace_url from ~/.coral/credentials.toml [default]https://marketplace.coralprotocol.aicurl -s -w "\nHTTP_STATUS:%{http_code}" \
-X POST "<marketplace_url>/api/v1/agents" \
-H "Authorization: Bearer <api_key>" \
-H "Content-Type: text/plain" \
--data-binary @coral-agent.toml
Parse the HTTP status code and response body from the curl output.
HTTP 200 — Success:
The response body is {"slug": "<slug>", "version": "<version>"}.
Tell the user:
Published successfully!
- Agent:
<slug>@<version>- View:
<marketplace_url>/api/v1/agents/<slug>Your agent is now discoverable on Coral Marketplace.
HTTP 400 — Validation or parse error:
Response: {"error": "validation_error" | "parse_error", "message": "..."}
Show the error message and provide specific fix guidance based on common errors:
edition = 3[marketplace] section1.0.0)[runtimes.executable] or [runtimes.docker]HTTP 401 — Unauthorized:
Response: {"error": "unauthorized" | "api_key_expired", "message": "..."}
Authentication failed: Run
/coral loginto re-authenticate.
HTTP 403 — Forbidden:
Response: {"error": "forbidden", "message": "..."}
Your API key does not have the publish scope. Create a new API key with publish permissions at the marketplace.
HTTP 409 — Conflict:
Response: {"error": "conflict", "message": "..."}
Conflict:
This typically means either:
- The slug is owned by another publisher — choose a different slug
- This exact version already exists — bump the version number
HTTP 5xx — Server error:
Marketplace server error. Try again in a few minutes. Check marketplace health:
<marketplace_url>/health
Connection error:
Could not connect to
<marketplace_url>. Check your network connection and the marketplace URL.