Skip to content

Common Patterns

Pattern: Session-Scoped Tool

@requires_sandbox("main")
async def my_tool(param: str, tool_context: ToolContext) -> dict:
    from aigise import get_aigise_session
    from aigise.utils.agent_utils import get_aigise_session_id_from_context

    session_id = get_aigise_session_id_from_context(tool_context)
    session = get_aigise_session(session_id)
    sandbox = session.sandboxes.get_sandbox("main")
    # ... use sandbox ...

Pattern: Multi-Sandbox Tool

@requires_sandbox("main", "joern")
async def analyze_code(path: str, tool_context: ToolContext) -> dict:
    session_id = get_aigise_session_id_from_context(tool_context)
    session = get_aigise_session(session_id)

    main_sandbox = session.sandboxes.get_sandbox("main")
    joern_sandbox = session.sandboxes.get_sandbox("joern")
    # ... use both sandboxes ...

Pattern: Dynamic Tool Loading

# Tools are automatically loaded from:
# - src/aigise/sandbox_scripts/bash_tools/
# - ~/.local/plugins/aigise/tools/
# Each tool directory should have SKILL.md with metadata

Pattern: Agent Composition

def mk_agent(aigise_session_id: str) -> AigiseAgent:
    sub_agent = AigiseAgent(...)
    sub_agent_tool = AgentTool(agent=sub_agent)

    root_agent = AigiseAgent(
        tools=[sub_agent_tool, ...],
        sub_agents=[...]
    )
    return root_agent

See Also