Skip to main content

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

MicroSkills Reference

Agent Handoff Validator

agent.handoff_validate

ProductionBounded custom (Class B)Deterministicstrictfastv1.0.0
No network

Overview

You send a packet with status IN_PROGRESS, BLOCKED or COMPLETE plus optional objective, completed, remaining, artifacts, constraints, blockers and nextAction. requiredFields selects from OBJECTIVE, STATUS, COMPLETED, REMAINING, ARTIFACTS, CONSTRAINTS, BLOCKERS and NEXT_ACTION. COMPLETE cannot keep remaining work; BLOCKED needs at least one blocker; artifact ids must be unique. This does not send the handoff, fetch artifacts or check whether the work is true.

A second agent that consumes a contradictory COMPLETE packet wastes a turn.

Reliability

Deterministic invariant checks; no clock or network. HANDOFF_INVALID — trigger: an unknown requiredFields value, an empty identifier, or an over-long string; retryable: no; next: send the published enum and bounded ids.

Context footprint

Verdict, counts and diagnostics only. A successful call costs 1 execution credit.

When to use it

When one agent is about to hand work to another and the packet must be internally consistent.

When you need to send the packet, fetch artifacts, or judge whether the work is true.

Scope

Note
Validates a structured agent handoff packet for status invariants and required sections.

Non-goals

  • Does not send a handoff
  • Does not fetch artifacts
  • Does not verify that work is true

Properties

IdempotentRetry safeStreaming supportedFile input supportedRequires external service

Capabilities

validation

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
statusstringYesPacket status from the published three-value lattice.
objectivestringNoOptional objective text. Omit it when the packet has none.
completedarrayNoOptional completed item ids, 0 through 500 unique strings of 1 through 256 characters. Omit it for none.
remainingarrayNoOptional remaining item ids, 0 through 500 unique strings of 1 through 256 characters. Omit it for none.
artifactsarrayNoOptional artifact ids, 0 through 500 unique strings of 1 through 256 characters. Omit it for none.
constraintsarrayNoOptional constraint ids, 0 through 500 unique strings of 1 through 256 characters. Omit it for none.
blockersarrayNoOptional blocker ids, 0 through 500 unique strings of 1 through 256 characters. Omit it for none.
nextActionstringNoOptional next action text. Omit it when the packet has none.
requiredFieldsarrayNoOptional extra required section names from the published enum, 0 through 8 strings. Omit it for the default published set.

Output schema

FieldTypeRequiredDescription
validbooleanYesTrue when no ERROR diagnostic was raised.
statusstringYesThe judged packet status.
completenessobjectYesClosed completeness counts for completed, remaining, artifacts, blockers and nextAction.
diagnosticsarrayYesNormalized findings as a bounded array of 0 through 500 closed {code, severity, message, path, source, details} objects.

API contract

POST /v1/execute
curl
curl -sS -X POST "$BASE/v1/execute" -H "Authorization: Bearer $KEY" -H 'Content-Type: application/json' -d '{"skillKey":"agent.handoff_validate","input":{"status":"COMPLETE"}}'
Integrations
TypeScript SDK
import { Squillify } from "@squillify/sdk";

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

const { output } = await sq.execute("agent.handoff_validate", {"status":"COMPLETE","constraints":["no-live-certify"],"objective":"Ship the bounded loop detector","artifacts":["pr-loop"],"remaining":[],"completed":["spec","tests"]});

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.
HANDOFF_INVALID400NoThe request payload failed this skill's input validation.

Other limits

LimitValue
Recommended inline bytes32 KiB

Limitations

  • Does not send a handoff
  • Does not fetch artifacts
  • Does not verify that work is true
  • Creating or routing the handoff
  • Checking artifact access

How to call

POST /v1/execute (requires authentication)

Request bodyjson
{
  "skillKey": "agent.handoff_validate",
  "input": {
    "status": "COMPLETE",
    "constraints": [
      "no-live-certify"
    ],
    "objective": "Ship the bounded loop detector",
    "artifacts": [
      "pr-loop"
    ],
    "remaining": [],
    "completed": [
      "spec",
      "tests"
    ]
  }
}

Examples

A COMPLETE packet with empty remaining is valid

Inputjson
{
  "status": "COMPLETE",
  "constraints": [
    "no-live-certify"
  ],
  "objective": "Ship the bounded loop detector",
  "artifacts": [
    "pr-loop"
  ],
  "remaining": [],
  "completed": [
    "spec",
    "tests"
  ]
}
Expected outputjson
{
  "valid": true,
  "diagnostics": [],
  "completeness": {
    "completedCount": 2,
    "remainingCount": 0,
    "artifactCount": 1,
    "blockerCount": 0,
    "hasNextAction": false
  },
  "status": "COMPLETE"
}
Tip
COMPLETE with no remaining work and unique artifacts is valid.

COMPLETE cannot carry remaining work

Inputjson
{
  "status": "COMPLETE",
  "remaining": [
    "docs"
  ]
}
Expected outputjson
{
  "valid": false,
  "diagnostics": [
    {
      "code": "COMPLETE_WITH_REMAINING",
      "severity": "ERROR",
      "message": "COMPLETE cannot carry remaining work.",
      "path": "/remaining",
      "source": "squillify",
      "details": {}
    }
  ],
  "completeness": {
    "completedCount": 0,
    "remainingCount": 1,
    "artifactCount": 0,
    "blockerCount": 0,
    "hasNextAction": false
  },
  "status": "COMPLETE"
}
Tip
COMPLETE_WITH_REMAINING is an ERROR, so valid is false.
  • Refuse COMPLETE packets that still list remaining work
  • Require a blocker before a BLOCKED packet is accepted

Avoid for

  • Creating or routing the handoff
  • Checking artifact access

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

validationagent