v0.10.0
Breaking changesFirst release as 10xgraph (import tenxgraph). Adds interrupt() for human approval, per-run client tools and Agent Skills spec support, and fixes remote tool pauses and checkpoint loading.
Agentflow is now 10xGraph. This is the first release of the 10xgraph package. It contains everything since 0.9.2, including the changes that shipped in 10xscale-agentflow 0.10.0 and 0.10.1, the final releases under the old name.
Breaking
- The package is renamed. Install
10xgraphand importtenxgraph. Every canonical path is the old one withagentflowreplaced bytenxgraph, for exampletenxgraph.core.graphandtenxgraph.storage.checkpointer. The top level also exportsStateGraph,Agent,ToolNode,AgentState,Message,STARTandEND. Uninstall10xscale-agentflowfirst: both packages ship anagentflowmodule. - Observable identifiers changed. The OpenTelemetry tracer and meter name and
GEN_AI_SYSTEMare now10xgraph, logger names aretenxgraph.*, and the prebuilt tools user-agent is10xgraph-prebuilt-tools/1.0. Update dashboards, alerts and log filters that match the old values. - Skills API reworked around the Agent Skills specification. Migration:
- The
set_skilltool is replaced byactivate_skill(skill_name)andread_skill_resource(skill_name, path). Prompts that mentionset_skillor parse its## SKILL:header must use the new names and the<skill_content name="...">wrapper. SkillConfig.inject_trigger_tableis renamedinject_catalog, andSkillsRegistry.build_trigger_table()is replaced bybuild_catalog().build_set_skill_tool()andload_resources()are removed. Useactivation.make_activate_skill_tool()andSkillsRegistry.read_file().- The
resources:frontmatter list is removed; every file in the skill directory is readable. triggers,tagsandpriorityare read only frommetadata, as strings.- Skill names are no longer lowercased. Discovering the same name in two directories no longer raises: the first wins and the second is reported as shadowed.
- The
- One checkpointer instance serves one state class.
compile()binds the graph’s state class to the checkpointer, and binding a different class raisesValueError. Migration: give each graph with its own state class its own checkpointer, and callcheckpointer.bind_state_type(MyState)when reading threads outside a compiled graph.
Added
interrupt()pauses a graph from inside a node or tool.from tenxgraph.utils import interrupt. The run saves the thread paused before that node; resume withainvoke({"resume": value}, config)andinterrupt()returnsvalue. It supportsmessage,reasonandresponse_schema, several calls per node, and parallel tool calls, where finished siblings are served from the tool ledger instead of running again.GraphInterruptderives fromBaseException, so tool and node error handling cannot swallow it.tenxgraph.utils.pending_interrupt(state)returns the open request.- Per-run client tools.
config["remote_tools"]lets one run bring its own client-executed tool schemas without changing the graph. The tool node offers them for that run and hands calls to them back to the client. - Agent Skills specification support (agentskills.io). Skills written for Claude Code, Codex or GitHub Copilot load unchanged. The system prompt gets an
<available_skills>catalog,read_skill_resourcereads any bundled file as text, andvalidate_skill()checks a skill against the spec. Loading is lenient: a spec violation is recorded as a diagnostic instead of dropping the skill. - Activated skills survive context trimming. If a context manager drops the tool result that carried a skill’s instructions, the agent re-injects them.
- Skill tool calls fire
InvocationType.SKILLcallbacks instead ofTOOL. tenxgraph.utils.injection.fresh()resolvesInject[...]defaults per call.
Changed
import agentflowkeeps working as a deprecated alias until 2.0. It resolves to the same module objects astenxgraphand emits oneDeprecationWarning.- Media URI scheme is
graph://media/. Oldagentflow://media/URIs are still read. - Default home directory is
~/.10xgraph, falling back to~/.agentflowwhen only that exists. This sets the defaultSqliteCheckpointerpath. - Cloud media prefix is
10xgraph-media. Objects underagentflow-mediaare still read. - The server config file is
10xgraph.json; the CLI falls back toagentflow.json.
Fixed
- Client-side (remote) tool calls now pause the graph. The check compared a class against block instances, so it was never true and the graph kept running. The graph now pauses after the tool node and resumes when the client sends the results on the same thread.
- Messages a node appends to
state.contextare streamed and returned, instead of only being saved. Inject[...]defaults no longer pin the first resolved dependency for the whole process. The first graph that ran used to decide which checkpointer every later graph used.- Parallel tool calls no longer lose
execution_meta.internal_datawrites. - Reading a non-UTF-8 skill resource no longer crashes the tool.
- Checkpointers no longer import a class named by stored data. Rows now store the state as JSON plus a format header and are rebuilt into the state class bound at
compile(). Old rows still load, and the stored class path is never imported.
Migration
pip uninstall 10xscale-agentflow
pip install 10xgraph# before
from agentflow.core.graph import StateGraph
# after
from tenxgraph import StateGraphSee Coming from Agentflow for every renamed identifier.