| name | effect-facet-unstable-ai-tool |
| description | Guidance for facet `effect/unstable/ai/Tool` focused on APIs like make, Failure, and FailureMode. Load after `effect-skill-router` when this facet is the primary owner. |
Effect Facet unstable/ai/Tool
Owned scope
- Owns only
effect/unstable/ai/Tool.
- Parent module:
effect/unstable/ai.
- Source anchor:
packages/effect/src/unstable/ai/Tool.ts.
What it is for
- The
Tool module provides functionality for defining and managing tools that language models can call to augment their capabilities.
API quick reference
make
Failure
FailureMode
FailureResult
getJsonSchema
getStrictMode
FailureEncoded
FailureResultEncoded
getDescription
getJsonSchemaFromSchema
providerDefined
ProviderDefined
ProviderDefinedTypeId
isDynamic
Any
isUserDefined
isProviderDefined
Name
- Full API list:
references/api-reference.md
How to use it
- Start with constructor-style APIs to build values/services before composing operations.
- Use schema/codec APIs to validate inputs at boundaries before business logic.
- Treat stateful APIs as synchronization boundaries and keep updates atomic.
- Assume unstable APIs can evolve quickly; isolate usage behind thin local adapters.
Starter example
import { Schema } from "effect";
import { Tool } from "effect/unstable/ai";
const Calculator = Tool.make("Calculator", {
description: "Performs basic arithmetic operations",
parameters: Schema.Struct({
operation: Schema.Literals(["add", "subtract", "multiply", "divide"]),
a: Schema.Number,
b: Schema.Number,
}),
success: Schema.Number,
});
Common pitfalls
- Unstable module contracts may change; avoid coupling core app logic directly to experimental details.
- Prefer explicit, typed combinators over ad-hoc casting or unchecked assumptions.
Not covered here
- Sibling facets under the same parent are out of scope:
effect-facet-unstable-ai-aierror (effect/unstable/ai/AiError)
effect-facet-unstable-ai-anthropicstructuredoutput (effect/unstable/ai/AnthropicStructuredOutput)
effect-facet-unstable-ai-chat (effect/unstable/ai/Chat)
effect-facet-unstable-ai-idgenerator (effect/unstable/ai/IdGenerator)
effect-facet-unstable-ai-languagemodel (effect/unstable/ai/LanguageModel)
effect-facet-unstable-ai-mcpschema (effect/unstable/ai/McpSchema)
effect-facet-unstable-ai-mcpserver (effect/unstable/ai/McpServer)
effect-facet-unstable-ai-model (effect/unstable/ai/Model)
effect-facet-unstable-ai-openaistructuredoutput (effect/unstable/ai/OpenAiStructuredOutput)
effect-facet-unstable-ai-prompt (effect/unstable/ai/Prompt)
effect-facet-unstable-ai-response (effect/unstable/ai/Response)
effect-facet-unstable-ai-telemetry (effect/unstable/ai/Telemetry)
effect-facet-unstable-ai-tokenizer (effect/unstable/ai/Tokenizer)
effect-facet-unstable-ai-toolkit (effect/unstable/ai/Toolkit)
- Parent module ownership belongs to
effect-module-unstable-ai.
Escalate to
effect-module-unstable-ai for parent module-wide workflows.
effect-skill-router for cross-module routing and ownership checks.
Reference anchors
- Facet source:
packages/effect/src/unstable/ai/Tool.ts
- Parent tests:
packages/effect/test/unstable/ai/Tool.test.ts
- Parent tests:
packages/effect/test/unstable/ai/AiError.test.ts
- Parent tests:
packages/effect/test/unstable/ai/Chat.test.ts
- Parent tests:
packages/effect/test/unstable/ai/LanguageModel.test.ts
- Parent tests:
packages/effect/test/unstable/ai/Prompt.test.ts
- Parent tests:
packages/effect/test/unstable/ai/AnthropicStructuredOutput.test.ts
- API details:
references/api-reference.md
- Usage notes:
references/usage-reference.md
- Ownership mapping:
references/owner.md