Skip to content

ShellTool

autogen.beta.tools.builtin.shell.ShellTool #

ShellTool(*, environment=None, version='bash_20250124')

Bases: Tool

Shell execution tool — provider-executed server-side.

Provider support:

  • OpenAI Responses API — maps to shell. Use environment to control where commands execute: ContainerAutoEnvironment, ContainerReferenceEnvironment.

  • Anthropic — NOT supported. Claude's bash tool is a client-side tool (the application must execute the command and return the result). Using ShellTool with AnthropicConfig raises :class:~autogen.beta.exceptions.UnsupportedToolError. Use :class:~autogen.beta.tools.LocalShellTool instead, which runs commands via subprocess and works with any provider.

See: - https://developers.openai.com/api/docs/guides/tools-shell

Source code in autogen/beta/tools/builtin/shell.py
def __init__(
    self,
    *,
    environment: ShellEnvironment | Variable | None = None,
    version: Literal["bash_20250124"] = "bash_20250124",
) -> None:
    self._params: dict[str, object] = {"version": version}
    if environment is not None:
        self._params["environment"] = environment
    self.name = SHELL_TOOL_NAME

name instance-attribute #

name = SHELL_TOOL_NAME

schemas async #

schemas(context)
Source code in autogen/beta/tools/builtin/shell.py
async def schemas(self, context: "Context") -> list[ShellToolSchema]:
    resolved = {k: resolve_variable(v, context, param_name=k) for k, v in self._params.items()}
    return [ShellToolSchema(**resolved)]

register #

register(stack, context, *, middleware=())
Source code in autogen/beta/tools/builtin/shell.py
def register(
    self,
    stack: "ExitStack | AsyncExitStack",
    context: "Context",
    *,
    middleware: Iterable["BaseMiddleware"] = (),
) -> None:
    async def execute(event: "ToolCallEvent", context: "Context") -> None:
        pass

    stack.enter_context(
        context.stream.where(BuiltinToolCallEvent.name == SHELL_TOOL_NAME).sub_scope(execute),
    )

set_provider #

set_provider(provider)
Source code in autogen/beta/tools/tool.py
def set_provider(self, provider: Provider) -> None:
    pass