What problem does it solve? Writing LLM-powered features in Jac normally requires manual prompt construction, output parsing, and retry logic. This Skill explains how to replace a function body with by llm(...) so the model generates typed return values directly, with structured outputs, tool use, and testable mocks. ## Core Features & Use Cases - Structured LLM Outputs: Return objects, enums, lists, and optional values from by llm functions, with sem statements serving as the prompt schema the model sees. - ReAct Tool Use: Pass tools=[...] so the model chooses which functions to call across multiple iterations, including bound object methods as tools. - Provider Configuration & Testing: Configure OpenAI, Anthropic, Google, Ollama, or local models via jac.toml and environment variables, and test without API keys using MockLLM. - Use Case: Build a ticket classifier that returns a typed Priority enum, or a ReAct agent that answers questions by calling a word_count tool, then verify both with MockLLM outputs in jac test. ## Quick Start Ask the AI to write a Jac function that summarizes text into a typed Summary object using by llm with sem descriptions for the function and each field.