{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://agntz.co/schemas/agent-manifest.schema.json","title":"agntz Agent Manifest","description":"A portable agntz YAML agent manifest.","oneOf":[{"$ref":"#/$defs/llmAgent"},{"$ref":"#/$defs/toolAgent"},{"$ref":"#/$defs/sequentialAgent"},{"$ref":"#/$defs/parallelAgent"},{"$ref":"#/$defs/transcriptionAgent"},{"$ref":"#/$defs/imageAgent"}],"$defs":{"baseAgent":{"type":"object","required":["id","kind"],"properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"description":{"type":"string"},"kind":{"enum":["llm","tool","sequential","parallel","transcription","image"]},"inputSchema":{"$ref":"#/$defs/manifestSchema"},"stateKey":{"type":"string","minLength":1},"maxSteps":{"type":"integer","minimum":1},"tokenBudget":{"type":"integer","minimum":1},"timeoutMs":{"type":"integer","minimum":1},"retention":{"type":"object","required":["mode"],"properties":{"mode":{"enum":["none","result","session"]},"ttlSeconds":{"type":"integer","minimum":60},"artifactTtlSeconds":{"type":"integer","minimum":60}},"additionalProperties":false}}},"manifestSchema":{"oneOf":[{"$ref":"#/$defs/propertyMap"},{"$ref":"#/$defs/canonicalJsonSchema"}]},"canonicalJsonSchema":{"type":"object","required":["type","properties"],"properties":{"$schema":{"type":"string"},"$id":{"type":"string"},"type":{"const":"object"},"properties":{"type":"object"},"required":{"type":"array","items":{"type":"string"}},"additionalProperties":{"oneOf":[{"type":"boolean"},{"type":"object"}]},"$defs":{"type":"object"}},"additionalProperties":true},"propertyMap":{"type":"object","additionalProperties":{"$ref":"#/$defs/propertyDefinition"}},"propertyDefinition":{"oneOf":[{"enum":["string","number","integer","boolean","object","array","null"]},{"type":"object","required":["type"],"properties":{"type":{"oneOf":[{"enum":["string","number","integer","boolean","object","array","null"]},{"type":"array","minItems":1,"items":{"enum":["string","number","integer","boolean","object","array","null"]}}]},"default":true,"enum":{"type":"array"},"min":{"type":"number"},"max":{"type":"number"}},"additionalProperties":true}]},"model":{"type":"object","required":["provider","name"],"properties":{"provider":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"temperature":{"type":"number"},"maxTokens":{"type":"integer","minimum":1},"topP":{"type":"number","minimum":0,"maximum":1},"topK":{"type":"integer","minimum":1},"presencePenalty":{"type":"number"},"frequencyPenalty":{"type":"number"},"stopSequences":{"type":"array","items":{"type":"string"}},"seed":{"type":"number"},"maxRetries":{"type":"integer","minimum":0},"providerOptions":{"type":"object"},"options":{"type":"object"}},"additionalProperties":false},"example":{"type":"object","required":["input","output"],"properties":{"input":{"type":"string"},"output":{"type":"string"}},"additionalProperties":false},"resource":{"type":"object","properties":{"kind":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9_-]*$"},"mode":{"enum":["read","read-write"]},"namespace":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"config":true},"additionalProperties":true},"agentRef":{"oneOf":[{"type":"object","required":["kind","agentId"],"properties":{"kind":{"const":"ref"},"agentId":{"type":"string","minLength":1},"version":{"type":"string","minLength":1}},"additionalProperties":false},{"type":"object","required":["kind","definition"],"properties":{"kind":{"const":"inline"},"definition":{"$ref":"#/$defs/llmAgent"}},"additionalProperties":false}]},"mcpTool":{"type":"object","required":["kind","server"],"properties":{"kind":{"const":"mcp"},"server":{"type":"string","minLength":1},"tools":{"type":"array","items":{"oneOf":[{"type":"string","minLength":1},{"type":"object","required":["tool"],"properties":{"tool":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"description":{"type":"string"},"params":{"type":"object","additionalProperties":{"type":"string"}}},"additionalProperties":false}]}},"headers":{"type":"object","additionalProperties":{"type":"string"}}},"additionalProperties":false},"localTool":{"type":"object","required":["kind","tools"],"properties":{"kind":{"const":"local"},"tools":{"type":"array","minItems":1,"items":{"type":"string","minLength":1}}},"additionalProperties":false},"agentTool":{"type":"object","required":["kind","agent"],"properties":{"kind":{"const":"agent"},"agent":{"type":"string","minLength":1},"version":{"type":"string","minLength":1}},"additionalProperties":false},"oauth2Auth":{"type":"object","required":["type","token_url","client_id","client_secret"],"properties":{"type":{"const":"oauth2_client_credentials"},"token_url":{"type":"string","format":"uri"},"client_id":{"type":"string"},"client_secret":{"type":"string"},"scope":{"type":"string"},"creds_location":{"enum":["basic_header","body"]},"cache_ttl":{"type":"number","minimum":0},"refresh_on":{"type":"array","items":{"type":"integer"}}},"additionalProperties":false},"tokenExchangeAuth":{"type":"object","required":["type","request","extract"],"properties":{"type":{"const":"token_exchange"},"request":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"},"method":{"enum":["GET","POST","PUT","PATCH"]},"headers":{"type":"object","additionalProperties":{"type":"string"}},"body_type":{"enum":["json","form","query"]},"body":true},"additionalProperties":false},"extract":{"type":"object","properties":{"response_format":{"enum":["json","text"]},"token_path":{"type":"string"},"expires_path":{"type":"string"}},"additionalProperties":false},"apply":{"type":"object","properties":{"location":{"enum":["header","query"]},"name":{"type":"string"},"format":{"type":"string"}},"additionalProperties":false},"cache_ttl":{"type":"number","minimum":0},"refresh_on":{"type":"array","items":{"type":"integer"}}},"additionalProperties":false},"httpFields":{"type":"object","properties":{"name":{"type":"string","minLength":1},"url":{"type":"string","minLength":1},"method":{"enum":["GET","POST","PUT","PATCH","DELETE"]},"description":{"type":"string"},"params":{"type":"object","additionalProperties":{"type":"string"}},"headers":{"type":"object","additionalProperties":{"type":"string"}},"body_type":{"enum":["json","form","query"]},"body":true,"auth":{"oneOf":[{"$ref":"#/$defs/oauth2Auth"},{"$ref":"#/$defs/tokenExchangeAuth"}]}}},"httpTool":{"type":"object","allOf":[{"$ref":"#/$defs/httpFields"},{"type":"object","required":["kind","name","url"],"properties":{"kind":{"const":"http"}}}],"unevaluatedProperties":false},"callbackTool":{"type":"object","required":["kind","name","url","inputSchema","secret"],"properties":{"kind":{"const":"callback"},"name":{"type":"string","pattern":"^[A-Za-z_][A-Za-z0-9_]*$"},"url":{"type":"string","minLength":1},"description":{"type":"string"},"inputSchema":{"$ref":"#/$defs/canonicalJsonSchema"},"secret":{"type":"string","minLength":1},"timeoutMs":{"type":"integer","minimum":1000,"maximum":120000},"maxRetries":{"type":"integer","minimum":0,"maximum":5}},"additionalProperties":false},"clientTool":{"type":"object","required":["kind","name","description","inputSchema"],"properties":{"kind":{"const":"client"},"name":{"type":"string","pattern":"^[A-Za-z_][A-Za-z0-9_]*$"},"description":{"type":"string","minLength":1},"inputSchema":{"$ref":"#/$defs/canonicalJsonSchema"},"timeoutMs":{"type":"integer","minimum":1000,"maximum":120000}},"additionalProperties":false},"manifestTool":{"oneOf":[{"$ref":"#/$defs/mcpTool"},{"$ref":"#/$defs/localTool"},{"$ref":"#/$defs/agentTool"},{"$ref":"#/$defs/httpTool"},{"$ref":"#/$defs/callbackTool"},{"$ref":"#/$defs/clientTool"}]},"toolCall":{"oneOf":[{"type":"object","required":["kind","name","server"],"properties":{"kind":{"const":"mcp"},"name":{"type":"string","minLength":1},"server":{"type":"string","minLength":1},"params":{"type":"object","additionalProperties":{"type":"string"}}},"additionalProperties":false},{"type":"object","required":["kind","name"],"properties":{"kind":{"const":"local"},"name":{"type":"string","minLength":1},"params":{"type":"object","additionalProperties":{"type":"string"}}},"additionalProperties":false},{"type":"object","allOf":[{"$ref":"#/$defs/httpFields"},{"type":"object","required":["kind","name","url"],"properties":{"kind":{"const":"http"}}}],"unevaluatedProperties":false}]},"outputMapping":{"type":"object","additionalProperties":{"oneOf":[{"type":"string"},{"$ref":"#/$defs/outputMapping"}]}},"step":{"type":"object","properties":{"ref":{"type":"string","minLength":1},"agent":{"$ref":"#"},"input":{"type":"object","additionalProperties":{"type":"string"}},"stateKey":{"type":"string","minLength":1},"when":{"type":"string"}},"oneOf":[{"required":["ref"]},{"required":["agent"]}],"additionalProperties":false},"llmAgent":{"type":"object","allOf":[{"$ref":"#/$defs/baseAgent"},{"type":"object","required":["model","instruction"],"properties":{"kind":{"const":"llm"},"model":{"$ref":"#/$defs/model"},"instruction":{"type":"string","minLength":1},"prompt":{"type":"string"},"examples":{"type":"array","items":{"$ref":"#/$defs/example"}},"tools":{"type":"array","items":{"$ref":"#/$defs/manifestTool"}},"outputSchema":{"$ref":"#/$defs/manifestSchema"},"spawnable":{"type":"array","items":{"$ref":"#/$defs/agentRef"}},"skills":{"type":"array","items":{"type":"string","pattern":"^[a-z][a-z0-9-]*$"}},"reply":{"oneOf":[{"type":"boolean"},{"type":"object","properties":{"maxPerRun":{"type":"integer","minimum":1}},"additionalProperties":false}]},"resources":{"type":"object","propertyNames":{"pattern":"^[A-Za-z][A-Za-z0-9_-]*$"},"additionalProperties":{"$ref":"#/$defs/resource"}}}}],"unevaluatedProperties":false},"toolAgent":{"type":"object","allOf":[{"$ref":"#/$defs/baseAgent"},{"type":"object","required":["tool"],"properties":{"kind":{"const":"tool"},"tool":{"$ref":"#/$defs/toolCall"}}}],"unevaluatedProperties":false},"sequentialAgent":{"type":"object","allOf":[{"$ref":"#/$defs/baseAgent"},{"type":"object","required":["steps"],"properties":{"kind":{"const":"sequential"},"steps":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/step"}},"until":{"type":"string"},"maxIterations":{"type":"integer","minimum":1},"output":{"$ref":"#/$defs/outputMapping"}}}],"unevaluatedProperties":false},"parallelAgent":{"type":"object","allOf":[{"$ref":"#/$defs/baseAgent"},{"type":"object","required":["branches"],"properties":{"kind":{"const":"parallel"},"branches":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/step"}},"output":{"$ref":"#/$defs/outputMapping"}}}],"unevaluatedProperties":false},"transcriptionAgent":{"type":"object","allOf":[{"$ref":"#/$defs/baseAgent"},{"type":"object","required":["model"],"properties":{"kind":{"const":"transcription"},"model":{"$ref":"#/$defs/model"},"instruction":{"type":"string"},"settings":{"type":"object","properties":{"language":{"type":"string"},"temperature":{"type":"number","minimum":0,"maximum":1},"timestampGranularities":{"type":"array","items":{"enum":["word","segment"]},"uniqueItems":true}},"additionalProperties":false}}}],"unevaluatedProperties":false},"imageAgent":{"type":"object","allOf":[{"$ref":"#/$defs/baseAgent"},{"type":"object","required":["model"],"properties":{"kind":{"const":"image"},"model":{"$ref":"#/$defs/model"},"instruction":{"type":"string"},"prompt":{"type":"string"},"settings":{"type":"object","properties":{"n":{"type":"integer","minimum":1,"maximum":10},"maxImagesPerCall":{"type":"integer","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^[1-9][0-9]*x[1-9][0-9]*$"},"aspectRatio":{"type":"string","pattern":"^[1-9][0-9]*:[1-9][0-9]*$"},"seed":{"type":"integer"}},"additionalProperties":false}}}],"unevaluatedProperties":false}}}