Graph-first tool runtime for agent workflows.
Project description
中文
ATaC 1.0.0 是一个面向 Agent 工作流的工具运行时,帮助 Agent 通过编排图代码复用资产。
它主要提供三类能力:
- 工具注册:统一注册 Agent 内置工具和 MCP 工具
- 工具调用:在 graph 节点里通过
tool_call(...)按名字调用工具 - Python SDK:让 Agent 在 graph 代码里直接调用已注册工具
你可以把常用能力沉淀为已注册工具,再在新的图里直接复用它们,把任务经验持续积累成可维护的工作流代码。
🛠 核心能力
- Agent 工具注册:把 Agent 内置工具统一注册到
AtacService。 - MCP 工具注册:把外部 MCP 工具接入同一套工具空间中复用,默认直接使用原始工具名。
- 图代码调用 SDK:在 graph 节点里直接使用
get_service().tool_call(...)。 - 资产复用导向:Agent 通过编排图代码,把已有工具资产重新组织成新的工作流。
- LangGraph 编排友好:直接在 LangGraph graph 代码中组合和复用这些工具资产。
🤖 最小接入示例
1. 注册 Agent 内置工具
from atac import AtacService, set_service
from atac.wrapper.langgraph import tool
import atac.subprocess as subprocess
service = AtacService()
set_service(service)
@tool(name="bash")
def bash_tool(command: str) -> str:
completed = subprocess.run(
command,
shell=True,
capture_output=True,
text=True,
)
if completed.returncode != 0:
raise RuntimeError(completed.stderr.strip() or "bash failed")
return completed.stdout.rstrip("\n")
def get_service() -> AtacService:
return service
2. 在 graph 代码里调用 ATaC SDK
from langgraph.graph import START, END, StateGraph
from atac import get_service
def run_bash(state: dict) -> dict:
output = get_service().tool_call("bash", {"command": f"echo {state['who']}"})
return {"output": output}
def build_graph():
graph = StateGraph(dict)
graph.add_node("run_bash", run_bash)
graph.add_edge(START, "run_bash")
graph.add_edge("run_bash", END)
return graph.compile()
🚀 快速开始
1. 安装
uv tool install atac
2. Python SDK
from myapp.bootstrap import get_service
service = get_service()
result = service.run_graph("myapp.graphs:build_graph", {"who": "mob"})
3. 示例
English
ATaC 1.0.0 is a tool runtime for agent workflows, helping agents reuse assets through graph-based workflow code.
It focuses on:
- built-in agent tool registration
- MCP tool registration
- named tool invocation from graph nodes
- a Python SDK for calling registered tools from graph code
You can keep reusable capabilities behind registered tools, then compose new workflows by calling those assets directly from graph code.
🛠 Key Features
- Built-In Agent Tool Registration: Register agent-native tools on
AtacService. - MCP Tool Registration: Bring external MCP tools into the same reusable tool space, using raw tool names by default.
- SDK Calls from Graph Code: Graph nodes can call
get_service().tool_call(...). - Asset Reuse Through Graphs: Agents build new workflows by composing graph code around existing registered tool assets.
- LangGraph-Friendly Composition: Reuse those assets directly inside LangGraph workflow code.
🤖 Minimal Integration
1. Register Built-In Agent Tools
from atac import AtacService, set_service
from atac.wrapper.langgraph import tool
import atac.subprocess as subprocess
service = AtacService()
set_service(service)
@tool(name="bash")
def bash_tool(command: str) -> str:
completed = subprocess.run(
command,
shell=True,
capture_output=True,
text=True,
)
if completed.returncode != 0:
raise RuntimeError(completed.stderr.strip() or "bash failed")
return completed.stdout.rstrip("\n")
def get_service() -> AtacService:
return service
2. Call the ATaC SDK from Graph Code
from langgraph.graph import START, END, StateGraph
from atac import get_service
def run_bash(state: dict) -> dict:
output = get_service().tool_call("bash", {"command": f"echo {state['who']}"})
return {"output": output}
def build_graph():
graph = StateGraph(dict)
graph.add_node("run_bash", run_bash)
graph.add_edge(START, "run_bash")
graph.add_edge("run_bash", END)
return graph.compile()
🚀 Quick Start
1. Install
uv tool install atac
2. Run via Python SDK
from myapp.bootstrap import get_service
service = get_service()
result = service.run_graph("myapp.graphs:build_graph", {"who": "mob"})
3. Examples
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file atac-1.0.3.tar.gz.
File metadata
- Download URL: atac-1.0.3.tar.gz
- Upload date:
- Size: 392.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
93cb2d6b0ee3efba1016e6f7d266402ca86675d8a50ad6c855a45a70a5e8d2fa
|
|
| MD5 |
8dca871bfff10951a3b4aae47f993450
|
|
| BLAKE2b-256 |
5b76b233034bc201d2ea91069f63463b0d6e36b2b4458bb09a0987e3230f736d
|
Provenance
The following attestation bundles were made for atac-1.0.3.tar.gz:
Publisher:
cd.yml on ATaC-team/ATaC
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
atac-1.0.3.tar.gz -
Subject digest:
93cb2d6b0ee3efba1016e6f7d266402ca86675d8a50ad6c855a45a70a5e8d2fa - Sigstore transparency entry: 1133219357
- Sigstore integration time:
-
Permalink:
ATaC-team/ATaC@3dd1dd76ab381cb3400d5acd4eacfe8b5971f1b6 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/ATaC-team
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
cd.yml@3dd1dd76ab381cb3400d5acd4eacfe8b5971f1b6 -
Trigger Event:
workflow_run
-
Statement type:
File details
Details for the file atac-1.0.3-py3-none-any.whl.
File metadata
- Download URL: atac-1.0.3-py3-none-any.whl
- Upload date:
- Size: 395.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d4f368aba754128893065e2fd3c22a345349d720cdb2220c71943587e9bba69
|
|
| MD5 |
99583d87ae5021238b86a064fcd4b9fb
|
|
| BLAKE2b-256 |
ee803fd4f6d66321c5ba13907cad4c9aa71870bd455348379f3ec92c1825e192
|
Provenance
The following attestation bundles were made for atac-1.0.3-py3-none-any.whl:
Publisher:
cd.yml on ATaC-team/ATaC
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
atac-1.0.3-py3-none-any.whl -
Subject digest:
8d4f368aba754128893065e2fd3c22a345349d720cdb2220c71943587e9bba69 - Sigstore transparency entry: 1133219435
- Sigstore integration time:
-
Permalink:
ATaC-team/ATaC@3dd1dd76ab381cb3400d5acd4eacfe8b5971f1b6 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/ATaC-team
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
cd.yml@3dd1dd76ab381cb3400d5acd4eacfe8b5971f1b6 -
Trigger Event:
workflow_run
-
Statement type: