---
title: "Output Format"
description: "Understanding CodeAgent return values and how to access execution history"
icon: "arrow-right-to-bracket"
mode: "wide"
---

## NotebookSession

The `run()` method returns a `NotebookSession` object containing all executed code cells and their results:

```python
session = await agent.run()

# Access basic properties
session.id                    # Unique session identifier
session.cells                 # List of CodeCell objects
session.current_execution_count  # Total number of executed cells
session.namespace             # Dictionary with all variables from execution

# Helper methods
session.get_cell(cell_id)     # Get a specific cell by ID
session.get_latest_cell()     # Get the most recently executed cell
```

## CodeCell Properties

Each cell in `session.cells` represents one executed code block:

```python
for cell in session.cells:
    cell.id              # Unique cell identifier
    cell.cell_type       # 'code' or 'markdown'
    cell.source          # The code that was executed
    cell.output          # Output from code execution (if any)
    cell.execution_count # Execution order number
    cell.status          # 'pending', 'running', 'success', or 'error'
    cell.error           # Error message if execution failed
    cell.browser_state   # Browser state after execution
```

## Accessing Results

### Basic Usage

```python
session = await agent.run()

# Iterate through all executed cells
for cell in session.cells:
    print(f"Cell {cell.execution_count}:")
    print(f"  Code: {cell.source}")
    if cell.error:
        print(f"  Error: {cell.error}")
    elif cell.output:
        print(f"  Output: {cell.output}")
    print(f"  Status: {cell.status}")

# Get the last cell
last_cell = session.get_latest_cell()
if last_cell:
    print(f"Last output: {last_cell.output}")

# Access variables from the execution namespace
products = session.namespace.get('products', [])
print(f"Extracted {len(products)} products")
```

### Checking Task Completion

When the agent calls `done()`, the result is stored in the namespace:

```python
session = await agent.run()

# Check if task was completed
task_done = session.namespace.get('_task_done', False)
task_result = session.namespace.get('_task_result')
task_success = session.namespace.get('_task_success')

if task_done:
    print(f"Task completed: {task_success}")
    print(f"Result: {task_result}")
```

### Getting All Outputs

```python
session = await agent.run()

# Get all outputs (excluding errors)
outputs = [cell.output for cell in session.cells if cell.output]

# Get all errors
errors = [cell.error for cell in session.cells if cell.error]

# Get successful cells only
successful_cells = [cell for cell in session.cells if cell.status == 'success']
```

## Data Models

See the complete data model definitions in the [CodeAgent views source code](https://github.com/browser-use/browser-use/blob/main/browser_use/code_use/views.py).
