Agently documentation for building AI applications with stable outputs, observable actions, and durable workflows.
The goal is to get one minimal end-to-end request running, then point you at the right next step.
pip install -U agently
uv pip install -U agently works the same way.
Agently ships three protocol-level request plugins: OpenAICompatible (Chat Completions compatible endpoints), OpenAIResponsesCompatible (Responses API shape), and AnthropicCompatible (Claude / Anthropic Messages API). Pick the one that matches the endpoint you are pointing at.
from agently import Agently
Agently.set_settings(
"OpenAICompatible",
{
"base_url": "https://api.openai.com/v1",
"api_key": "${ENV.OPENAI_API_KEY}",
"model": "${ENV.OPENAI_MODEL}",
},
)
For Claude:
Agently.set_settings(
"AnthropicCompatible",
{
"base_url": "https://api.anthropic.com",
"api_key": "${ENV.ANTHROPIC_API_KEY}",
"model": "${ENV.ANTHROPIC_MODEL}",
"max_tokens": 4096,
},
)
For Ollama or any other OpenAI-compatible local server, set base_url to that server (for Ollama: http://127.0.0.1:11434/v1) and set model to the local model name. api_key can be omitted for local-only setups that don’t require it.
See Model Setup for the full provider list and ${ENV.*} placeholders.
from agently import Agently
agent = Agently.create_agent()
result = (
agent
.input("Write a one-line positioning statement and two highlights for Agently.")
.output({
"positioning": (str, "One-line positioning", True),
"highlights": [
{
"title": (str, "Highlight title", True),
"detail": (str, "One-line detail", True),
}
],
})
.start()
)
print(result)
Each leaf is (type, description, ensure). The third slot is the ensure flag — set to True to guarantee the field is present in the parsed result, retrying the request if needed. See Schema as Prompt.
output().