writing-skills
writing-skills
Use when creating new skills, editing existing skills, or verifying skills work before deployment
runtype-build-productBuild, deploy, validate, or modify Runtype-hosted AI products, agents, flows, tools, surfaces, schedules, and eval suites, including from example templates.
Independent GitHub snapshot · Automated classification · Original documentation governs
Use this skill when the user wants to create or materially change a Runtype product. The Runtype MCP server is the source of truth for schemas, catalogs, and current platform rules.
If the Runtype MCP tools are not available, run runtype install-mcp for the current
agent harness. Until the tools appear, call them through the CLI with runtype mcp tools
and runtype mcp call <tool>. For sign-in and account setup, use the runtype skill.
Before designing or creating resources:
get_build_instructions(task="build-product", description=...).get_build_instructions(task="generate-flow", description=..., name=...).get_build_instructions(task="explain-capabilities").For a product build, pass focus as a comma-separated list when the product clearly
needs one of these areas: commerce, embed, subagents, skills, search,
retrieval, or decision-models. The response includes those full guides instead of
pointers to them.
Then fetch only the get_platform_documentation topics the task needs:
| Need | Topics |
|---|---|
| Product shape (FPO, the product definition) | product-schema, types-fpo, types-fpo-template |
| Flow step configs | flow-step-types, types-flow-steps |
| Delivery and embeds | surface-types, types-surface-configs, persona-embed |
| Slack workspace connection | slack-setup |
| Tools and credentials | builtin-tools, orthogonal-tools, external-tools; pass vendor instead of a topic for one Orthogonal vendor |
| Routing, classification, relevance, matching, or rubric scoring | decision-models plus list_decision_models |
| Generative models | models plus the account's list_model_configs |
| Agent that runs outside Runtype | external-agents, or the runtype-external-agents skill |
| Validation or go-live blockers | validation-errors, setup-readiness |
The build instructions point to deeper topics, such as evals, when the task needs them. Do not fetch every catalog in advance, and do not read the same topic again as a resource.
Answer these questions before building:
Start with an agent unless the work is a fixed sequence. Use flows for deterministic pipelines, indexing, batch processing, artifact rendering, and high-volume steps that must be fast and cheap. Split large jobs into subagents or several capabilities instead of one long prompt.
For commerce products, check UCP support when a merchant domain is known, summarize the finding, and ask whether to use UCP or the traditional commerce path before you continue.
/now link, call list_example_templates and then
create_product_from_example with one of slug, session, or url. If required
variables are missing, the tool creates nothing and returns the variable specs. Ask the
user for the values and call it again. The example creates the product and its
resources, so skip to reading get_product_setup in step 6, then test in step 7.get_me, list_products, list_agents, list_flows, list_tools,
list_model_configs, and, for an existing product, list_surfaces.list_products, list_agents, list_flows, and list_tools return compact string
previews by default. Keep that shape for discovery. Pass view: "full" only when you
need complete strings for every row.agent_type to narrow list_agents. Call the matching get_* tool for one
resource's full configuration.surface-types docs. messaging is the generic
multi-channel surface. Prefer a dedicated surface such as
slack, email, or sms when you need channel-specific setup or formatting. For
browser-side WebMCP tools, use a chat surface with behavior.webmcp, not an mcp
surface. For WebMCP details and client-side tools outside the Persona widget, use the
runtype-persona skill.validate_product, validate_flow,
validate_product_flow, validate_product_agent, validate_product_surface,
validate_product_tool, and validate_code for custom JavaScript or transform code.
Require valid: true with no errors. Fix only the reported fields, not the whole
definition.create_product creates an empty product. It does not import an FPO definition.create_tool for a custom tool (an
external HTTP tool, custom code, or a flow exposed as a tool), apply the
tool-design skill checklist. If that skill is not installed, it is public at
https://github.com/runtypelabs/skills/tree/main/skills/tool-design.add_product_capability for each capability, create_surface for each channel,
and add_surface_item to route capabilities to each surface. Use the returned IDs.
create_surface does not accept every surface type; check its schema. For
imessage, use the REST endpoint POST /v1/products/{id}/surfaces.get_product_setup before testing integrations. Complete authorized setup, or
return the remaining human-action links. A bare flow does not need product setup.execute_agent, dispatch, execute_tool, run_flow, submit_batch,
trace_execution, and trace_conversation as appropriate.execute_agent run does not prove surface routing or formatting. For
telegram, slack, sms, and imessage surfaces, use test_surface to check
formatting and message chunking without delivering anything. For a chat widget,
create a client token with create_client_token and generate the snippet with
generate_persona_embed_code.create_eval_suite, add realistic cases with add_eval_cases, and run it with
run_eval_suite. Run it again after each prompt, step, or tool change, and pass
model_override to compare models. Turn a real failed agent run into a case with
add_eval_case_from_execution. submit_eval runs an ungraded, one-off comparison.needs_setup, say that the product is built but setup remains, and give the user the
checklist. Create a surface key only when the surface requires one, and never print it.get_product_setup
or get_surface_setup before you guess.decision-models; do not put
a decision-only model in an agent or prompt step. Create and publish reusable question
sets before binding builtin:typesafe_judge. Build state explicitly, and never transfer
calibration thresholds or provider confidence across models without measurement.list_model_configs and the models topic. Never leave it to account defaults.{{secret:KEY}} and call check_secrets for missing keys. Give the user the
dashboard link from get_secret_intake_manifest or get_product_setup.update_flow.steps replaces the entire step list.platform-catalog and the focused topic it points to.If the runtype skill is installed, its references hold more background. The live MCP
docs take precedence.