Skip to main content

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

Dynamic Skill Resolution

Here’s the good news: your AI agents can reach a large, deterministic MicroSkill catalog without ever overloading their context window. This page walks you through how we make that happen.

By default, we don’t hand your model hundreds or thousands of MicroSkills up front. Instead, your agents resolve the capabilities they need on demand through OSRE, our Open Skill Resolution Engine.

Think of OSRE as the resolution layer that sits between your agent’s intent and the executable Squillify MicroSkill catalog — it connects what your agent wants to do with what it’s actually allowed to run.

The context window problem

When your agent connects to a large tool or MicroSkill server, it can receive a list of every available tool — names, descriptions, and input/output schemas all included.

At small scale, that’s fine. At large scale, it falls apart.

MicroSkill countEstimated context costImpact
10 MicroSkills~3K tokensNegligible
50 MicroSkills~15K tokensNoticeable
200 MicroSkills~60K tokensSevere
1,000 MicroSkills~300K tokensNot viable for most agents

And it isn’t just about token cost.

Long tool lists also make it harder for your model to pick the right tool. When it has to choose from too many similar options — with overlapping descriptions, similar schemas, and subtle differences — you’re more likely to run into:

  • Wrong tool selection
  • Hallucinated tool calls
  • Invalid arguments
  • Higher latency
  • Higher token usage
  • Weaker reasoning due to polluted context

We solve this for you by separating catalog size from the tool surface your agent actually sees. The catalog can be large; your agent’s context stays small.

From discovery to resolution

Basic discovery only answers one question:

"Which MicroSkills match this query?"

Together, OSRE and Squillify give your agent a short, permission-aware list of relevant MicroSkills. Your agent can then review the best match, retrieve its contract, and invoke it safely.

OSRE handles the search and ranking, combining:

  • Keyword matching (with field-specific boosts)
  • Alias matching
  • Category filtering
  • Tag indexing
  • Positive and negative example signals
  • Weighted hybrid scoring

Before OSRE even runs, the Squillify adapter layer takes care of authorization scoping for you:

  • Tenant entitlement filtering
  • API key grant filtering (via SearchScope)
  • Access mode enforcement
  • Result limiting

Once a search comes back, your agent can pull a full MicroSkill contract through platform.skill_contract_get and then run the MicroSkill through platform.skill_execute.

Search gives you a ranked list of matching MicroSkills with basic metadata. Contract retrieval gives you a complete, ready-to-use MicroSkill contract.

Capability Resolution and Execution Flow

Here’s the full picture of how we let your agents reach a large universe of MicroSkills without flooding their context window.

1

Agent / LLM

Visible surface stays intentionally small

platform.skill_catalog_searchplatform.skill_contract_getplatform.skill_execute

Benefit: Minimal context footprint with full capability flexibility.

The agent does not need thousands of tools in its prompt. It only needs to know how to search, retrieve, and execute.

User intent — "validate an email address"
2

Search Request

The agent calls

platform.skill_catalog_search

Benefit: Natural-language capability discovery.

The agent can ask for what it needs without knowing the exact skill name upfront.

3

Effective Search Scope

Squillify restricts the searchable universe using

  • tenant entitlements
  • API key access mode
  • API key skill grants
  • enabled / disabled skills
  • lifecycle state
  • runtime visibility rules

Benefit: Secure discovery by design.

The agent only discovers skills it is allowed to see and use. Search results are permission-aware before ranking happens.

4

Ranked Skill Discovery

OSRE searches the scoped skill universe using

  • Skill names and descriptions
  • Aliases and tags
  • Developer-provided examples
  • Input and output summaries

Benefit: High-precision skill matching at scale.

OSRE turns vague intent into ranked, relevant capabilities without requiring the agent to reason over the full catalog.

5

Ranked Skill Candidates

Example result

  1. 1validation.email_address
  2. 2text.extract_email
  3. 3identity.normalize_contact_email

Benefit: Faster tool selection with lower error risk.

The agent receives a short, ranked shortlist instead of a massive unstructured catalog.

Agent calls — platform.skill_contract_get
6

Exact Skill Contract

Squillify returns the executable contract for the selected skill, including

  • stable skill key and version
  • input and output schemas
  • required fields
  • usage limits
  • examples
  • execution and determinism information

Benefit: Contract-backed execution with no guesswork.

The agent knows exactly what input is expected, what output will be returned, and how the skill is expected to run.

Agent calls — platform.skill_execute
7

Squillify Runtime

Runtime enforces

  • authorization
  • schema validation
  • quotas
  • rate limits
  • metering
  • observability
  • audit trail
  • structured errors

Benefit: Governed execution for production agents.

Every skill call is validated, authorized, measured, and observable before and after execution.

8

MicroSkill Output

Example

{
  "valid": true,
  "normalized": "[email protected]",
  "reason": null
}

Benefit: Reliable, deterministic results agents can safely compose.

The agent receives a clean response matching the published output schema.

Key principles

Minimal default context

Your agent doesn’t need the full catalog up front. It only needs a small tool surface:

  • A search capability (platform.skill_catalog_search)
  • A contract retrieval capability (platform.skill_contract_get)
  • An execution capability (platform.skill_execute)

These three foundation tools are always visible in the MCP tool list, so your model starts lean and expands only when it actually needs to.

Intent-driven resolution

Your agent doesn’t have to know the whole catalog — it just has to express what it’s trying to do.

Example intentjson
{
  "query": "validate an email address"
}

OSRE turns that intent into one or more matching MicroSkill summaries, ranked by relevance.

Authorization-aware resolution

You can trust that search never returns MicroSkills the caller isn’t allowed to use — the Squillify adapter layer makes sure of it. Results are scoped by:

  • Tenant entitlements
  • API key access mode (ALL_ENABLED_SKILLS, SELECTED_SKILLS, or NONE)
  • API key MicroSkill grants
  • Enabled MicroSkills
  • Runtime policy
Note
A caller can never discover a MicroSkill outside its authorized scope.

Contract-first invocation

For simple invocations, the ranked summaries from search already give you enough metadata to work with. When a MicroSkill is more involved, your agent can grab the full contract via platform.skill_contract_get.

A MicroSkill contract includes:

  • Stable skill key and version
  • Input and output schemas
  • Required fields
  • Usage limits
  • Examples
  • Execution and determinism information

Once your agent has the contract, it can build a valid invocation without any guesswork.

Transport independence

OSRE isn’t tied to MCP. It works just as well with:

  • MCP
  • REST
  • Internal Java calls
  • SDK-based agents
  • Local agent runtimes
  • Future protocol adapters

MCP is just one way in. OSRE is the resolution engine underneath.

Resolution flow

Here’s what a typical agent flow looks like:

  1. Your agent receives a user request.
  2. The model realizes it needs a capability.
  3. That capability isn’t currently visible or known.
  4. Your agent calls platform.skill_catalog_search with a natural language query.
  5. We scope the search to the caller’s authorized catalog through the Squillify adapter.
  6. OSRE searches and ranks the candidate MicroSkills.
  7. Ranked MicroSkill summaries come back.
  8. Your agent picks the best match.
  9. If it needs more detail, your agent calls platform.skill_contract_get to grab the full contract.
  10. Your agent calls platform.skill_execute with the MicroSkill name and arguments.
  11. We validate, authorize, execute, meter, and hand back the result.

Example

User request: Validate this email address: [email protected]

Search requestjson
{
  "query": "validate email address",
  "limit": 5
}
Search resultjson
{
  "results": [
    {
      "name": "identity.validate_email_syntax",
      "score": 0.94,
      "match_type": "FUZZY",
      "rank": 1,
      "version": "1.0.0",
      "title": "Validate email syntax",
      "description": "Validate whether a string follows a valid email address syntax without sending network requests.",
      "category": "identity",
      "input_schema": [
        {
          "name": "email",
          "type": "string",
          "description": "Email address to validate.",
          "required": true
        }
      ],
      "tags": ["email", "validation", "identity"],
      "mode": "STRICT",
      "latency": "INSTANT"
    }
  ],
  "total_available": 44,
  "total_matches": 2,
  "total_matches_bounded": false,
  "query_used": "validate email address"
}
MicroSkill invocationjson
{
  "skill_name": "identity.validate_email_syntax",
  "arguments": {
    "email": "[email protected]"
  }
}

Search API

The search your agent talks to is exposed through platform.skill_catalog_search.

Search request

{
  "query": "email validation",
  "category": "identity",
  "limit": 10,
  "include_contract": "if_unique",
  "category_mode": "resolve"
}
FieldTypeRequiredDescription
querystringYesNatural language or keyword query describing the needed capability. Max 200 characters.
categorystringNoOptional category filter. In the default resolve mode, unknown values are matched by alias or fuzzily and any leftover text folds into the query.
limitintegerNoMaximum number of results to return. Default 10, max 25.
include_contractstringNoEmbed the full contract right in the result when the match is unambiguous: if_exact (query is an exact skill name) or if_unique (exactly one match). Default none. Saves you a follow-up platform.skill_contract_get call.
category_modestringNoHow we read your category: resolve (default, tolerant alias/fuzzy matching) or exact (only a canonical category value is accepted). Default resolve.

Search response

{
  "results": [
    {
      "name": "identity.validate_email_syntax",
      "score": 0.94,
      "match_type": "FUZZY",
      "rank": 1,
      "version": "1.0.0",
      "title": "Validate email syntax",
      "description": "Validate whether a string follows a valid email address syntax.",
      "category": "identity",
      "input_schema": [
        {
          "name": "email",
          "type": "string",
          "description": "Email address to validate.",
          "required": true
        }
      ],
      "tags": ["email", "validation", "identity"],
      "mode": "STRICT",
      "latency": "INSTANT"
    }
  ],
  "total_available": 44,
  "total_matches": 3,
  "total_matches_bounded": false,
  "query_used": "email validation",
  "category_resolution": {
    "requested": "identity",
    "resolved": ["identity"],
    "mode": "exact",
    "confidence": 1.0,
    "taxonomy_version": "tool-category/v1"
  }
}
FieldMeaning
match_typeHow the result matched: EXACT (your query is the skill name) or FUZZY. We decide this for you — don't infer it from score.
rankThe result's 1-based position in the ranked list.
total_availableHow many skills your API key can reach before the query and filters — always scoped to what you're allowed to use.
total_matchesHow many skills matched your resolved query and filters, before we paginate.
total_matches_boundedWhen total_matches_bounded is true, the count is a lower bound. Refine your query before relying on uniqueness.
query_usedThe query we actually ran. Your raw query — the category is reported separately in category_resolution.
category_resolutionHow we interpreted your category: what you asked for, what it resolved to, the match mode (exact, alias, fuzzy, or query_fallback), our confidence, and the taxonomy version. Only present when you send a category.
Tip
Add include_contract: "if_unique"and, when exactly one skill matches, we’ll embed its full contract right in the result — byte-for-byte identical to a standalone platform.skill_contract_get, so you skip a round-trip.

MCP integration

In MCP environments, we expose exactly three foundation tools instead of the full catalog.

Your MCP tool list contains:

  • platform.skill_catalog_search
  • platform.skill_contract_get
  • platform.skill_execute

Standard MicroSkills never show up directly in the MCP tool list. You discover them through platform.skill_catalog_search and invoke them through platform.skill_execute.

That keeps your MCP tool list small while still giving you the full authorized catalog to draw from.

MCP-visible toolstext
platform.skill_catalog_search
platform.skill_contract_get
platform.skill_execute

Your agent can search for capabilities through platform.skill_catalog_search, pull the full contract through platform.skill_contract_get, then run the MicroSkill it chose through platform.skill_execute.

That way you avoid injecting hundreds of schemas into the model context.

Security model

Rest easy: dynamic resolution doesn’t skip any of our security. Every layer still applies.

LayerEnforcement
Tenant entitlementsThe adapter layer only searches MicroSkills enabled for the tenant.
API key access modeSELECTED_SKILLS keys only search granted MicroSkills. NONE keys return no results.
SearchScope filteringThe adapter builds a BitSet of allowed MicroSkill ordinals before OSRE runs.
Runtime authorizationSkillAccessAuthorizer validates every invocation before execution.
Schema validationInputs are validated before MicroSkill execution.
Quota enforcementExecuted MicroSkills count against usage limits.
Rate limitingDiscovery traffic is monitored against a separate protection budget and doesn’t consume your execution quota.
ObservabilityWe monitor discovery and execution separately. Only target MicroSkill execution contributes to billable usage.
Foundation bypassSearch and contract retrieval are not metered. Only target MicroSkill execution is metered.
Note
If a caller can’t invoke a MicroSkill, they shouldn’t be able to discover it either. Call-time authorization stays mandatory, even after a successful search.

Scope handling

The scope your search runs over depends on your API key’s access mode.

Access modeSearch scope
ALL_ENABLED_SKILLSAll MicroSkills enabled for the tenant.
SELECTED_SKILLSOnly MicroSkills explicitly granted to the API key.
NONENo MicroSkills. Search returns empty results.

For unauthenticated access (the public catalog REST API), a separate unscoped search serves public MicroSkill metadata without authorization filtering.

An API key should only ever search the MicroSkills it’s allowed to use. That protects you from both unauthorized execution and catalog leakage.

Static catalog vs dynamic resolution

ApproachContext costDiscovery latencyAuth-awareScales to large catalogs
Expose all toolsO(n)NonePartiallyNo
Expose category groupsO(n/k)NonePartiallyLimited
Search-only catalog toolO(1) + result sizeOne callYesYes
OSRE skill resolutionO(1) + selected resultsOne callYesYes

The model we recommend is OSRE skill resolution with authorization scoping at the adapter layer.

Why OSRE matters

OSRE is more than just a convenience layer.

It’s what lets us scale from a small catalog to hundreds or thousands of deterministic MicroSkills without ever forcing your agent to carry the entire catalog in context.

It gives your agents access to large capability surfaces while preserving:

  • Low context usage
  • Deterministic contracts
  • Authorization boundaries
  • Predictable execution
  • Low runtime overhead
  • Protocol independence
  • Future extensibility
Tip
For humans, search engines made the web usable. For AI agents, skill resolution makes large executable catalogs usable.

Recommended agent behavior

When you integrate your agents with Squillify, we’d suggest this pattern:

  1. Start with the three foundation tools.
  2. Reach for platform.skill_catalog_search whenever a needed capability is missing.
  3. Review the top matches and choose a MicroSkill only when its description and contract fit the task. If none clearly fit, refine your search instead of guessing.
  4. Use platform.skill_contract_get to pull the full contract when input schemas are complex.
  5. Validate the required fields from the input schema.
  6. Invoke the MicroSkill through platform.skill_execute.
  7. Cache resolved contracts locally when it makes sense.
  8. Re-resolve whenever the task, tenant scope, or API key changes.
Tip
Don’t assume the full Squillify catalog is visible — assume instead that capabilities are resolved on demand.

Available today

Everything you need for on-demand MicroSkill discovery is available today:

  • Three lightweight MCP foundation tools
  • Permission-aware ranked search
  • Contract retrieval and governed execution
  • Equivalent discovery endpoints for REST integrations
  • Optional inline contracts for clear matches

Summary

We use OSRE to make large, deterministic MicroSkill catalogs genuinely usable by your AI agents.

Your agent doesn’t need to know every MicroSkill — it just needs to know how to find the right one when the moment comes.

That’s the shift:

From: load every tool into context.
To: resolve the right contract on demand.

It keeps your agents lean, cuts down on hallucinated tool usage, holds your authorization boundaries firm, and lets us grow the catalog without growing the model context.