Skip to main content

Squillify development is paused indefinitely. Read why, and discover what this experiment achieved. Read the story

MicroSkills Reference

Prompt Renderer

ai.prompt_render

ProductionBounded custom (Class B)Deterministicstrictfastv1.0.0
No network

Overview

You send a template of at most 512 KiB, a variables object, syntax SQUILLIFY_BRACES_V1, missing ERROR or EMPTY, and escape NONE or JSON_STRING. We substitute dotted paths, treat names such as __proto__ as ordinary keys, and reject loop or section tags. {{ and }} are literal braces. Output stops at 2 MiB. We never call a model, include files, or evaluate conditionals.

A full template language is an execution surface. This renderer only substitutes dotted paths so a prompt can be filled without running code.

Reliability

Fully deterministic; no clock or network. PROMPT_RENDER_TEMPLATE_INVALID — trigger: empty template, unterminated placeholder or illegal path; retryable: no; next: send a well-formed brace template. PROMPT_RENDER_TEMPLATE_TOO_LARGE — trigger: template above 512 KiB or variables above 512 KiB; retryable: no; next: shorten the request. PROMPT_RENDER_VARIABLE_MISSING — trigger: missing is ERROR and a path is absent; retryable: no; next: supply the path or set missing to EMPTY. PROMPT_RENDER_OUTPUT_TOO_LARGE — trigger: rendered UTF-8 size exceeds 2 MiB; retryable: no; next: shrink substitutions. PROMPT_RENDER_SYNTAX_UNSUPPORTED — trigger: loop or section tags, or a syntax other than SQUILLIFY_BRACES_V1; retryable: no; next: remove those tags.

Context footprint

Rendered text plus path lists and a byte count. A successful call costs 1 execution credit.

When to use it

When you have a small brace template and a JSON object of values, including nested paths.

When the template uses loops, sections, file includes, or needs a model to complete it.

Scope

Note
Substitutes dotted paths in a SQUILLIFY_BRACES_V1 template and reports referenced, unused and missing paths.

Non-goals

  • Does not evaluate loops, sections or conditionals
  • Does not include files or execute code
  • Does not call a model

Properties

IdempotentRetry safeStreaming supportedFile input supportedRequires external service

Capabilities

text-processing

Cost & billing

Flat rate per invocation

MetercallsBillable onsuccessCost per call1 credit

File handling

Accepts file_refProduces file_refMax input2 MB

How we handle your data

Sensitive input, safe output
What this means

This skill may receive sensitive content, but it does not target sensitive data and returns only a structured non-sensitive result.

Squillify guarantees
  • Runs inside Squillify
  • This skill runs inside Squillify.
  • Payloads are not sent to an external service by this skill.
  • Squillify does not permanently store submitted payloads.
  • Telemetry records metadata only, not submitted content.
  • Submitted payloads are not used for training.
  • Submitted payloads are not reviewed by humans.
  • This skill does not target sensitive data.
  • The response does not contain submitted content.
Your responsibility

Squillify does not determine whether submitted content is sensitive. Your application is responsible for deciding what data it is allowed to submit. Your application is responsible for securing the response.

Read the Microskill Data Handling Policy

Input schema

FieldTypeRequiredDescription
templatestringYesTemplate text of 1 through 2,097,152 characters; runtime accepts at most 524,288.
variablesobjectYesPurpose-bound JSON object of scalar, array and object values whose keys are dotted-path segments — unconstrained RFC 8259 JSON items.
syntaxstringNoSQUILLIFY_BRACES_V1 only. Omit it for SQUILLIFY_BRACES_V1.
missingstringNoERROR or EMPTY. Omit it for ERROR, which refuses a missing path.
escapestringNoNONE or JSON_STRING. Omit it for NONE.

Output schema

FieldTypeRequiredDescription
renderedstringYesFilled template text, at most 2,097,152 UTF-8 bytes.
syntaxstringYesApplied syntax, always SQUILLIFY_BRACES_V1 in v1.
missingModestringYesApplied missing policy, ERROR or EMPTY.
escapestringYesApplied escape, NONE or JSON_STRING.
referencedarrayYesBounded array of 0 through 2000 dotted paths in first-seen or supplied order.
unusedarrayYesBounded array of 0 through 2000 dotted paths in first-seen or supplied order.
missingarrayYesBounded array of 0 through 2000 dotted paths in first-seen or supplied order.
outputBytesintegerYesUTF-8 byte length of rendered.

API contract

POST /v1/execute
curl
curl -sS -X POST "$BASE/v1/execute" -H "Authorization: Bearer $KEY" -H 'Content-Type: application/json' -d '{"skillKey":"ai.prompt_render","input":{"template":"Hello {name}","variables":{"name":"Priya"}}}'
Integrations
TypeScript SDK
import { Squillify } from "@squillify/sdk";

const sq = new Squillify({ apiKey: process.env.SQUILLIFY_API_KEY });

const { output } = await sq.execute("ai.prompt_render", {"template":"Hello {customer.name}, id {id}.","variables":{"customer":{"name":"Priya"},"id":"NW-1","locale":"en-GB"}});

Errors

CodeHTTPRetryableDescription
VALIDATION_ERROR400NoThe request payload failed schema validation.
UNAUTHORIZED401NoMissing or invalid API key.
SKILL_NOT_ACCESSIBLE403NoThe API key is not granted access to this skill.
SKILL_NOT_AVAILABLE_FOR_PLAN403NoThis skill is not included in your current plan.
PLAN_ELIGIBILITY_UNAVAILABLE503YesPlan eligibility could not be decided. Retry after backoff.
SKILL_NOT_FOUND404NoThe requested skill or version does not exist.
TENANT_RATE_LIMITED429YesRequest rate limit exceeded. Retry after backoff.
QUOTA_EXCEEDED429YesPlan quota exhausted. Retryable once the quota period resets.
EXECUTION_TIMEOUT504YesExecution exceeded the allowed time budget.
PROMPT_RENDER_TEMPLATE_INVALID400NoThe request payload failed this skill's input validation.
PROMPT_RENDER_TEMPLATE_TOO_LARGE429NoA size, quota, rate, or time limit was exceeded.
PROMPT_RENDER_VARIABLE_MISSING400NoThe request payload failed this skill's input validation.
PROMPT_RENDER_OUTPUT_TOO_LARGE429NoA size, quota, rate, or time limit was exceeded.
PROMPT_RENDER_SYNTAX_UNSUPPORTED400NoThe skill does not support the requested variant.

Other limits

LimitValue
Recommended inline bytes32 KiB

Limitations

  • Does not evaluate loops, sections or conditionals
  • Does not include files or execute code
  • Does not call a model
  • Mustache or Handlebars templates with sections
  • Templates that need a live model call

How to call

POST /v1/execute (requires authentication)

Request bodyjson
{
  "skillKey": "ai.prompt_render",
  "input": {
    "template": "Hello {customer.name}, id {id}.",
    "variables": {
      "customer": {
        "name": "Priya"
      },
      "id": "NW-1",
      "locale": "en-GB"
    }
  }
}

Examples

Nested dotted path with an unused locale key

Inputjson
{
  "template": "Hello {customer.name}, id {id}.",
  "variables": {
    "customer": {
      "name": "Priya"
    },
    "id": "NW-1",
    "locale": "en-GB"
  }
}
Expected outputjson
{
  "missingMode": "ERROR",
  "referenced": [
    "customer.name",
    "id"
  ],
  "outputBytes": 21,
  "escape": "NONE",
  "syntax": "SQUILLIFY_BRACES_V1",
  "rendered": "Hello Priya, id NW-1.",
  "unused": [
    "locale"
  ],
  "missing": []
}
Tip
customer.name resolves into the nested object and locale is listed unused.

Literal braces and JSON string escaping

Inputjson
{
  "escape": "JSON_STRING",
  "variables": {
    "note": "a \"quote\""
  },
  "template": "Say {{hello}} {note}"
}
Expected outputjson
{
  "missingMode": "ERROR",
  "referenced": [
    "note"
  ],
  "outputBytes": 23,
  "escape": "JSON_STRING",
  "syntax": "SQUILLIFY_BRACES_V1",
  "rendered": "Say {hello} a \\\"quote\\\"",
  "unused": [],
  "missing": []
}
Tip
{{ becomes a literal brace and the quote in note is escaped.
  • Fill a small prompt template from a structured variables object
  • JSON-escape substitutions before you embed them in a larger JSON prompt

Avoid for

  • Mustache or Handlebars templates with sections
  • Templates that need a live model call

Composable with

Safety & privacy

  • Runs without calling any external service.
  • Your payloads are never stored permanently.
  • Telemetry captures metadata only — never your payload contents.
  • We never train models on your payloads.
  • No human reviews your payloads.

Tags

prompttextaitransformation