Scope
- Provider path: Anthropic tool use today. The runtime is provider-neutral internally so OpenAI Responses tools can be added later.
- Built-in tools shipped today:
unsplash.search— licensed photo search (see schema below).image.generate— AI image generation via OpenAI (gpt-image-1) or Google Gemini (gemini-2.5-flash-image, nicknamed “nano-banana”). Full reference: Asset Manager & AI Images.
Internal Tool Contract
Every tool is registered with aToolManifest:
name: unique id (for exampleunsplash.search,pim.getProduct)description: natural-language purposeinputSchema: JSON Schema for tool inputoutputSchema: JSON Schema for tool outputcapability:readorwritetimeoutMs: per-call timeoutretryPolicy:{ maxAttempts, backoffMs? }idempotent: whether identical calls can be replayed safely
siteIdsessionIduserId(optional)traceIdplannerProvider
okdata(on success)error{ code, message, retryable }(on failure)latencyMsattempts
Default Governance Policy
- Read tools auto-run.
- Write tools require approval (runtime blocks direct auto execution).
Anthropic Adapter Behavior
Planner exposes tools as Anthropictools[] with input_schema.
The planner loop supports:
- model requests tool call (
tool_use) - orchestrator executes tool server-side
- orchestrator returns
tool_result - model continues until
submit_edit_plan
submit_edit_plan is still validated by existing normalizer + editPlanSchema.
Unsplash Tool
unsplash.search input:
unsplash.search output:
unsplash.search are covered by the
Unsplash License. author and sourceUrl
are returned so adopters can render photographer + Unsplash attribution
alongside each used image. See
Asset Manager & AI Images → Unsplash: licensing & attribution
for the full rules (attribution, prohibited uses, download tracking).
Adopter Onboarding
Option A: Runtime registration endpoint
Status: Future roadmap — not yet implemented. The
GET /tools and
POST /tools/register endpoints described below are not wired up in the
orchestrator today. Use Option B (bootstrap config file via
ORCHESTRATOR_TOOL_MANIFEST_PATH) for now.GET /toolsto view enabled toolsPOST /tools/registerto register a remote tool
Option B: Bootstrap config file
SetORCHESTRATOR_TOOL_MANIFEST_PATH to a JSON file:
Remote Tool HTTP Contract
Orchestrator calls remote endpoints with:PIM Skeleton Example
- Tool name:
pim.getProduct - Input schema:
{ sku: string } - Output schema:
{ sku: string, title: string, description?: string, imageUrl?: string, price?: string } - Capability:
read
DAM Skeleton Example
- Tool name:
dam.searchAssets - Input schema:
{ query: string, limit?: integer } - Output schema:
{ items: [{ id: string, url: string, alt?: string, mimeType?: string }] } - Capability:
read