v0.9.0
Highlights
- Tool prompt snippets are now rendered as a named
<ToolGuidance>block. Each active tool's guidance is paired with the LLM-visible function name(s) it covers and rendered as<Tool name="...">text</Tool>entries wrapped in one<ToolGuidance>block inside the system prompt's<Tools>section -- so the model knows exactly which functions each snippet is about, instead of reading an anonymous bullet list. Local tools name their direct functions (end_session,web_search/web_fetch,send_email_to_user); MCP tools (browser, Notion, X) pair their snippet with every function their server exposes. - Breaking: the
AgentConfig.system_instructioncallable contract changed. A callable override now receives the single pre-rendered<ToolGuidance>block as astr(previously alist[str]of raw snippets), and""when no tools contribute guidance -- so you can embed it unconditionally.build_system_instructiontakes the same pre-rendered block. - New public API.
ToolGuidanceandrender_tool_guidanceare exported from the package root;ToolBundle.instructionsnow carriesToolGuidanceentries instead of plain strings (breaking for custom tools that construct bundles -- see the updatedexamples/custom_brain_and_tool.py). - Fixed two typos in the end-session prompt snippet, and synced the drifted
openlily.__version__with pyproject.
Upgrading: if you pass a callable system_instruction or build ToolBundles with prompt snippets, update to the new shapes: the callable receives one pre-rendered str, and bundle snippets become ToolGuidance(tool_names=(...), text=...). String/None system_instruction configs are unaffected.
Install
pip install 'openlily @ git+https://github.com/getlark/openlily.git@v0.9.0#subdirectory=server'