Releases: AgentEra/Agently
v4.1.0
Features
Action Runtime
- [Action] Replaced the old single-layer tool path with a three-layer Action Runtime:
ActionRuntime,ActionFlow, andActionExecutor. - [Action] Added native support for local functions, MCP servers, Python/Bash sandboxes, and custom execution backends.
TriggerFlow
- [TriggerFlow] Renamed runtime events to the
triggerflow.*namespace, while keeping compatibility aliases for legacyworkflow.*andtrigger_flow.*subscriptions. - [TriggerFlow] Published Mermaid definitions on workflow definition runtime events so execution graphs can show the full static flow.
Runtime Logging
- [Runtime] Added debug log profiles (
off,simple,detail) and switched the default runtime output to quiet mode. - [Runtime] Unified console and storage sinks around the same profile model so summary and detail rendering stay consistent.
Updates
Agent And Core
- [Agent] Exported
Agentas a default top-level import fromagently. - [Core] Normalized
RuntimeContextinternals and consolidated the runtime log helpers.
Docs And Examples
- [Docs] Refreshed the README for 4.1.0 and updated the
agently-devtoolscompatibility line toagently >=4.1.0,<4.2.0. - [Examples] Added Action Runtime samples, refreshed DevTools examples to use the
Agentlyshortcut, and archived obsolete tool/MCP demos.
Bug Fixes
- [Runtime] Fixed duplicate streaming
doneemission. - [Response] Fixed the JSON repair fallback for structured streaming.
v4.0.9
v4.0.9
Features
Runtime Observation And DevTools Companion
- [Runtime] Added the runtime event bus and run-lineage foundation for request, model, agent-turn, action, and workflow observation.
- [Runtime] Added model request observation lifecycle events, including prompt build, request, streaming, retry, completion, and meta stages.
- [DevTools] Introduced
agently-devtoolsas an optional companion package for local observation, evaluation, logs, and playground workflows. - [DevTools] Added public integration entrypoints around
ObservationBridgeandcreate_local_observation_app.
TriggerFlow
- [TriggerFlow] TriggerFlow executions now emit workflow definitions so local execution graphs can display the full static flow, including branches that have not run yet.
- [TriggerFlow] Added chunk-level runtime scope, including signal metadata, runtime input and output payloads, and origin-chunk metadata on workflow stream and result events.
- [TriggerFlow] Added flow definition export and import through JSON and YAML, plus Mermaid generation for reviewable workflow assets.
- [TriggerFlow] Added execution state save and load support for restart-safe pause and resume workflows.
- [TriggerFlow] Added sub-flow support, runtime resources, and stronger contract typing, including FastAPI Helper alignment with TriggerFlow contracts.
Tools And Developer Experience
- [Tools] Added Playwright and PyAutoGUI-powered built-in browsing support, with fallback integration in
Browse. - [Skills] Published the official installable Agently skills catalog.
Updates
Request, Response, And Settings
- [Request] Split
ModelRequestresponse and result handling into clearer response-side modules. - [Response] Refined response reuse paths around
ModelResponseandModelResponseResult. - [Settings] Added
auto_load_env=Truesupport tosettings.load_settings()and to entities that expose.load_settings(). - [Prompt] Added
save_toandencodingsupport to.get_json_prompt()and.get_yaml_prompt(). - [Output] Added
Enumsupport in output format declarations. - [Utils] Renamed
RuntimeDatatoStateDatawhile keeping compatibility aliases.
Session And Tooling
- [Session] Streamlined session resize pipeline and handler APIs, with follow-up typing and behavior fixes.
- [Tools] Refactored tool handlers and multi-round action flow to make tool execution paths easier to observe and maintain.
Bug Fixes
- [Runtime] Fixed parsed model completion payload fields in runtime observation.
- [TriggerFlow] Fixed cases where flow definition export or Mermaid generation could miss chunks.
- [Prompt] Fixed long-string handling in
.load_yaml_prompt()and.load_json_prompt(). - [Settings] Fixed auth-header handling and preserved compatibility between
optionsandrequest_options. - [Data] Fixed list-at-root handling in
DataLocator. - [Session] Fixed chat-history mutation bugs caused by pointer behavior in session helpers.
v4.0.7
Features
TriggerFlow Concurrency Control
- [TriggerFlow]: Global concurrency control for each execution (pass
concurrencywhen creating execution or starting flow). - [TriggerFlow]:
.batch()supports concurrency control. - [TriggerFlow]:
.for_each()supports concurrency control. - [Example]: New concurrency control example.
Python Sandbox Utility
- [Utils]: New Python Sandbox utility (safer isolated execution environment).
Updates
TriggerFlow
- [TriggerFlow]:
.to()/.batch()support tuple form(name, handler)to create chunks quickly. - [TriggerFlow]: Use
TriggerFlow.chunk()in BaseProcess so chunks are registered properly. - [TriggerFlow]: Auto-generated id for quick-created chunks.
- [Examples]: New TriggerFlow RESTful API + FastAPI example.
- [Examples]: New example for quick chunk creation.
Agent Request
- [Request]: Request instance adds
.start()/.async_start()methods. - [Request Settings]:
specificsupportsNone. - [Request Settings]:
auto_load_envadded to.set_settings(), and core classes now usesettings.set_settingsuniformly.
Prompt / Configure Prompt
- [Prompt]:
.get_yaml_prompt()/.get_json_prompt()renamed from.to_*. - [Prompt]:
.load_yaml_prompt()/.load_json_prompt()supportPathinput and key-path extraction. - [Prompt]: Add
encodingparameter to.load_yaml_prompt()/.load_json_prompt(). - [Prompt]: Fix prompt type misjudgement.
- [Prompt]:
DataFormatter.substitute_placeholder()separated from Prompt into utils.
Debug / Developer Experience
- [Debug]: Console printing beautified and flushed for smoother output.
- [Examples]: Provide function calling & reasoning examples for
specifictype. - [Examples]: Add uvicorn start script.
Bug Fixes
- [TriggerFlow]: Fix batch wait bug.
- [Prompt]: Ignore
Nonein output configure prompt generation. - [Prompt]: Ensure
yaml.safe_dump()usessort_keysto keep original order. - [Request]:
.get_result()should be sync (fixed in range). - [Misc]: Fix LazyImport error causing main package import issues.
- [MCP]: Support MCP responses without structured_content or non-TextContent.
- [Auth]: Avoid sending auth when none is configured.
- [Compatibility]: Ensure compatibility for uncertain types like
dict/dict[Any, Any].
v4.0.6
Features
ChromaDB Integrations
You can use Agently ChromaDB Integrations to simplify the use case of ChromaDB
from agently import Agently
from agently.integrations.chromadb import ChromaData, ChromaEmbeddingFunction
from chromadb import Client as ChromaDBClient
embedding = Agently.create_agent()
embedding.set_settings(
"OpenAICompatible",
{
"model": "qwen3-embedding:0.6b",
"base_url": "http://127.0.0.1:11434/v1/",
"auth": "nothing",
"model_type": "embeddings",
},
).set_settings("debug", False)
embedding_function = ChromaEmbeddingFunction(agent=embedding)
chroma_data = ChromaData(
[
{
"document": "Book about Dogs",
"metadata": {"book_name": "🐶"},
},
{
"document": "Book about cars",
"metadata": {"book_name": "🚗"},
},
{
"document": "Book about vehicles",
"metadata": {"book_name": "🚘"},
},
{
"document": "Book about birds",
"metadata": {"book_name": "🐦⬛"},
},
],
)
chromadb = ChromaDBClient()
collection = chromadb.create_collection(
name="test",
get_or_create=True,
metadata={
"hnsw:space": "cosine",
},
configuration={
"embedding_function": embedding_function,
},
)
collection.add(**chroma_data.get_kwargs())
print("[ADD]:\n", chroma_data.get_original_data())
result = collection.query(query_texts=["Book about traffic"])
print(result)Updates
TriggerFlow
.when()support 'and', 'or' and 'simple_or' mode. [Example Code]- Developers can use
.save_blue_print()to export blue print data from trigger flow instance or from blue print instance and use.load_blue_print()to import blue print data into other trigger flow instance or blue print instance. [Example Code]
Agent Request
Better Prompt DX
- [Prompt]: New prompt slots
optionsto allow developers to customize single request / agent request options. - [Prompt]: New prompt slots
examplesto help developers provide one-shot / few-shots examples. - [Prompt]: Update
agent.promptto allow developers export prompt text or messages only. [Example Code] - [Prompt]: New settings
prompt.prompt_title_mappingto help developers to customize title of different prompt slots. [Example Code]
Configure Prompt Update
- [Configure Prompt]: Support the expression of Agently output format. [Example Code]
Request Settings Updates to Support Local Deployed Model Service
- [Request Settings]: Support customized authorization headers [Example Code]
- [Request Settings]: Developers can use
full_urlto provide full model request URL in case that sometimes the model URL does not follow the rule of OpenAI base URL. - [Request Settings]: Developers can use
api_keyin request settings now, it works all the same asauth.
Agent Response
- [Instant Mode]: StreamingData add attribute
full_datawhich contains current completed streaming data. - [Result]: Former
.get_result()method is renamed as.get_data()which will return parsed data. New.get_result()method will returnAgentlyResponseResultinstance which contains more attributes to help developers to collect information of result. - [Response Generator Type]: New response generator type
typed_delta(and now.get_generator()and.get_async_generator()will use argumenttypeinstead of argumentcontent). - [Response Event]: Add new response event
tool_callswhich can be consumed in generator typetyped_deltaandinstant/streaming_parse. [Example Code]
Plugins
- [Agent Extension Core]: Update extension handler slots to
request_prefixes,broadcast_prefixes,broadcast_suffixesandfinally - [Tools]: Built-in tool Search new support argument
optionsto customize more options configures. [Example Code]
Utils
- [FunctionShifter]: New decorator
@auto_options_functo help developers to create a function that will ignore undefined key arguments that passed by caller (useful when model try to pass undefined arguments to a tool function).
v4.0.5
Key Feature Updates
TriggerFlow
- Rewrite for each process (
.for_each()) to support nested for each loops perfectly. [Example Code] - Add
.____(<comments>, log_info=<True | False>, print_info=<True | False>, show_value=<True | False>)to help developers to write flow chain beautifully. - Add
.when()to support developers to wait chunk done event, runtime data change event, flow data change event or customize event and trigger the next actions. [Example Code] - Add
.collect()to support developers to wait and collect parallel branches. [Example Code] - Rewrite and update match case process, now developers can use
.match(mode=<"hit_all" | "hit_first">)to set different judgement hit strategy. [Example Code]
You can also explore more example codes in TriggerFlow examples dir.
Prompt Configures
In Agently v3, developers loved YAML-Prompt very much. Now we update this feature to Prompt Configures!
Mappings replacing in any prompt settings
Now developers can use mappings parameter in any prompt setting methods. Use case examples: agent.input("${user_input}", mappings={ "user_input": beautify(user_input) }) or agent.set_agent_prompt("instruct", "You're a ${ role }", mappings={ "role": roles[current_role] }).
Developers can use mapping replacing feature to replace placeholder ${ <variable name> } in string content. Dvelopers can also use it to replace key name or value in dictionary like { "${ key_to_be_replaced }": "${ value_to_be_replaced_directly }" }.
Check here to see Example Code
YAML and JSON format supported!
Now developers can use both YAML and JSON format data to configure agent behaviors!
-
YAML-Prompt Example Code:
-
JSON-Prompt Example Code:
Built-In Tools
We added two built-in tools Search and Browse which can be registered to agent or be used independently. You can use from agently.builtins.tools import Search, Browse to import and use them.
Search tool can search information from DuckDuckGo, Bing, Google, Yahoo, Wikipedia via package ddgs and search document from arXiv.
Browse tool use BeautifulSoup4 to fetch most common website page content for agent.
Check here to see Example Code
Instant Mode
We add a new attribute .wildcard_path to instant mode event data for developers to watch items in list easier. Now developers can use code like if data.wildcard_path == "root_key.list[*]:" to watch and handle every item in root_key.list from Agently agent response in instant mode.
Check here to see Example Code
Other Updates
- Optimized
LazyImportto support the situation when the package's import name is different from the install name. - Optimized tool using logic to catch exceptions when calling the tools instead of preventing the agent request process.
- Many other updates and bug fixes...
=========
We'll keep updating and welcome all users to express your ideas or discuss with us in https://github.com/AgentEra/Agently/discussions
Have fun and happy coding!
v4.0.3
Some major bugs fixed and add more examples:
Trigger Flow Feature Examples: https://github.com/AgentEra/Agently/tree/main/examples/trigger_flow
Trigger Flow WebSocket Server Example: https://github.com/AgentEra/Agently/tree/main/examples/trigger_flow/ws_server
v4.0.1
New Features:
[Trigger Flow]:
- if condition chain expression;
- flow.when(), flow.when_event(), flow.when_runtime_data(), flow.when_flow_data();
- quick start from flow instance(create a temp execution);
- separator method .____();
- support specific event type when create new process;
v4.0.0 Official
New Feature:
TriggerFlow(Examples)
v4.0.0-beta-3
v4.0.0b3 (#232)
New Features:
- Support MCP as Tools: https://github.com/AgentEra/Agently/blob/main/examples/mcp_agent.py
- Key Waiter Extension: https://github.com/AgentEra/Agently/blob/main/examples/key_waiter_agent.py
- Auto Func Decorator: https://github.com/AgentEra/Agently/blob/main/examples/auto_func_decorator.py
- Use system message to manage in-frame events
- Streaming debug logs (new Debug Console CUI still need to be optimized)
Bug fix:
- Bugs of Tool Extension in v4.0.0v2
- Httpx connection close too soon when request need a long time
Full Changelog: v4.0.0-beta-2...v4.0.0-beta-3
v4.0.0-beta-2
Key feature: Agent Extension Tool
import asyncio
from agently import Agently
Agently.set_settings(
"OpenAICompatible",
{
"base_url": "http://localhost:11434/v1",
"model": "qwen2.5:7b",
"model_type": "chat",
},
)
agent = Agently.create_agent()
@agent.tool_func
async def add(a: int, b: int) -> int:
"""
Get result of `a(int)` add `b(int)`
"""
await asyncio.sleep(1)
print(a, b, a + b)
return a + b
result = agent.input("34643523+52131231=? Use tool to calculate!").use_tool(add).start()
print(result)