Daytona

Run agent-generated Python, JavaScript, and TypeScript in a remote Daytona sandbox with file and shell operations.

Daytona enables Agno agents to run Agent-generated code in a remote, secure sandbox.

Prerequisites

  1. Get your Daytona API key and API URL: https://app.daytona.io/dashboard/keys
  2. Set the API key and API URL as environment variables:
    export DAYTONA_API_KEY=<your_api_key>
    export DAYTONA_API_URL=<your_api_url> #(optional)
  3. Install the dependencies: uv pip install agno openai daytona
  4. Export OPENAI_API_KEY=<your_key>. The agent uses Agno's default OpenAI model.

from agno.agent import Agent
from agno.tools.daytona import DaytonaTools

# ---------------------------------------------------------------------------
# Create Agent
# ---------------------------------------------------------------------------


agent = Agent(
    name="Coding Agent with Daytona tools",
    tools=[DaytonaTools()],
    markdown=True,
    instructions=[
        "You are an expert at writing and executing code. You have access to a remote, secure Daytona sandbox.",
        "Your primary purpose is to:",
        "1. Write clear, efficient code based on user requests",
        "2. ALWAYS execute the code in the Daytona sandbox using run_code",
        "3. Show the actual execution results to the user",
        "4. Provide explanations of how the code works and what the output means",
        "Guidelines:",
        "- NEVER just provide code without executing it",
        "- Execute all code using the run_code tool to show real results",
        "- Support Python, JavaScript, and TypeScript execution",
        "- Use file operations (create_file, read_file) when working with scripts",
        "- Install missing packages when needed using run_shell_command",
        "- Always show both the code AND the execution output",
        "- Handle errors gracefully and explain any issues encountered",
    ],
)

# ---------------------------------------------------------------------------
# Run Agent
# ---------------------------------------------------------------------------
if __name__ == "__main__":
    agent.print_response(
        "Write JavaScript code to generate 10 random numbers between 1 and 100, sort them in ascending order, and print each number"
    )

Match the sandbox language

The default sandbox language is Python, while the final prompt requests JavaScript. For the default setup, replace that prompt with “Write Python code to generate 10 random numbers between 1 and 100, sort them, and print each number.” Set verify_ssl=True on DaytonaTools to use normal certificate verification.

Use run_code for this demonstration. The current create_file implementation rewrites single quotes inside its quoted heredoc, so it can corrupt code containing those quotes. The toolkit stores a remote sandbox ID in session state; restarting this database-free script does not demonstrate recovery of that ID.

Run the Example

# Clone and setup repo
git clone https://github.com/agno-agi/agno.git
cd agno
git checkout d703c34f3abf3c41275d3fb2da6e0518a8881f24

# Create and activate virtual environment
./scripts/demo_setup.sh
source .venvs/demo/bin/activate
uv pip install -U daytona

python cookbook/91_tools/daytona_tools.py

For details, see Daytona cookbook.