IntegratedNotebookToolSet#
The IntegratedNotebookToolSet provides full Jupyter notebook operations with integrated kernel management, cell-based editing, and code execution.
Overview#
Key features:
Notebook Management: Create, open, and manage notebook files
Cell Operations: Add, update, delete, move cells with cell_id-based addressing
Code Execution: Execute Python, R (via %%R magic), and shell (via %%bash)
Kernel Management: Restart, interrupt, and monitor kernel state
Auto-Recovery: Automatic kernel recovery after crashes
Basic Usage#
from pantheon.agent import Agent
from pantheon.toolsets import IntegratedNotebookToolSet
# Create notebook toolset
notebook_tools = IntegratedNotebookToolSet(
name="notebook",
workdir="/path/to/notebooks" # Optional
)
# Create agent and add toolset at runtime
agent = Agent(
name="analyst",
instructions="You are a data analyst. Use Jupyter notebooks for analysis."
)
await agent.toolset(notebook_tools)
await agent.chat()
Constructor Parameters#
Parameter |
Type |
Description |
|---|---|---|
|
str |
Name of the toolset |
|
str | None |
Working directory for notebooks. Defaults to current directory. |
|
RemoteBackend | None |
Optional backend for streaming execution output. |
|
“auto” | “remote” | “local” |
IOPub streaming mode. Default: “auto”. |
Tools Reference#
create_notebook#
Create or open a notebook file.
result = await notebook_tools.create_notebook(
notebook_path="analysis.ipynb"
)
# Returns: {"success": True, "notebook_path": "...", "action": "created"|"opened"}
add_cell#
Add a new cell to the notebook.
result = await notebook_tools.add_cell(
notebook_path="analysis.ipynb",
cell_type="code", # "code", "markdown", or "raw"
content="import pandas as pd",
cell_id="cell_1", # Optional: auto-generated if not provided
position=None, # Optional: index, cell_id, or None (append)
execute=True # Execute after adding (recommended for code)
)
Position options:
None: Append to end (default)"0","1": Insert at index (0-based)"cell_id": Insert after the cell with this ID
execute_cell#
Execute an existing cell’s content.
result = await notebook_tools.execute_cell(
notebook_path="analysis.ipynb",
cell_id="cell_1"
)
# Returns: {"success": True, "output": "...", "kernel_session_id": "..."}
Supported syntax:
Python code (default)
R language:
%%R(cell magic) or%R(line magic)Shell commands:
%%bashor%%shOther magics:
%%time,%%html,%matplotlib inline, etc.
update_cell#
Update cell content with optional execution.
# Full replacement
result = await notebook_tools.update_cell(
notebook_path="analysis.ipynb",
cell_id="cell_1",
content="x = 10",
execute=True
)
# Partial replacement
result = await notebook_tools.update_cell(
notebook_path="analysis.ipynb",
cell_id="cell_1",
content="n_neighbors=30",
old_content="n_neighbors=15",
execute=True
)
# Returns: {"success": True, "replacements": 1, ...}
delete_cell#
Delete a cell from the notebook.
result = await notebook_tools.delete_cell(
notebook_path="analysis.ipynb",
cell_id="cell_1"
)
move_cell#
Move a cell to a different position.
result = await notebook_tools.move_cell(
notebook_path="analysis.ipynb",
cell_id="cell_3",
below_cell_id="cell_1" # Move after cell_1 (None = move to top)
)
read_cells#
Read cells with execution status and optional content.
# Get cell summaries
result = await notebook_tools.read_cells(
notebook_path="analysis.ipynb"
)
# Get full cell content
result = await notebook_tools.read_cells(
notebook_path="analysis.ipynb",
include_details=True
)
# Read specific cells only
result = await notebook_tools.read_cells(
notebook_path="analysis.ipynb",
include_details=True,
cell_ids=["cell_1", "cell_3"]
)
Returns:
{
"success": True,
"cells": [
{
"cell_id": "cell_1",
"cell_index": 0,
"cell_type": "code",
"execution_count": 1,
"execution_status": "success", # or "error", "not_executed"
"source_preview": "import pandas...", # when include_details=False
"source": "import pandas as pd", # when include_details=True
"outputs": [...] # when include_details=True
}
]
}
list_notebooks#
List running notebooks for the current session.
result = await notebook_tools.list_notebooks()
# Returns: {"success": True, "notebooks": [...], "count": 2}
manage_kernel#
Unified kernel management operations.
# Restart kernel (clears all state)
result = await notebook_tools.manage_kernel(
notebook_path="analysis.ipynb",
action="restart"
)
# Interrupt running execution
result = await notebook_tools.manage_kernel(
notebook_path="analysis.ipynb",
action="interrupt"
)
# Get kernel status
result = await notebook_tools.manage_kernel(
notebook_path="analysis.ipynb",
action="status"
)
# Get current kernel variables
result = await notebook_tools.manage_kernel(
notebook_path="analysis.ipynb",
action="variables"
)
# Shutdown kernel (context preserved)
result = await notebook_tools.manage_kernel(
notebook_path="analysis.ipynb",
action="shutdown"
)
# Delete context completely
result = await notebook_tools.manage_kernel(
notebook_path="analysis.ipynb",
action="delete"
)
R Language Support#
Use R via the %%R magic (requires rpy2):
await notebook_tools.add_cell(
"analysis.ipynb",
"code",
content="""%%R
library(ggplot2)
data(mtcars)
ggplot(mtcars, aes(x=mpg, y=hp)) + geom_point()
""",
execute=True
)
Pass data between Python and R:
# Python to R: %%R -i variable_name
# R to Python: %%R -o variable_name
Examples#
Data Analysis Workflow#
from pantheon.agent import Agent
from pantheon.toolsets import IntegratedNotebookToolSet
notebook_tools = IntegratedNotebookToolSet(name="notebook")
analyst = Agent(
name="analyst",
instructions="""You are a data analyst. When analyzing data:
1. Create a notebook for the analysis
2. Import required libraries
3. Load and explore data
4. Create visualizations
5. Document findings in markdown cells"""
)
await analyst.toolset(notebook_tools)
# Agent creates notebook and performs analysis
result = await analyst.run(
"Analyze the iris dataset and create visualizations"
)
Complete Example#
# Create notebook
await notebook_tools.create_notebook("demo.ipynb")
# Add import cell and execute
await notebook_tools.add_cell(
"demo.ipynb",
cell_type="code",
content="import numpy as np\nimport matplotlib.pyplot as plt",
execute=True
)
# Add markdown documentation
await notebook_tools.add_cell(
"demo.ipynb",
cell_type="markdown",
content="# Sine Wave Plot\nGenerating a simple sine wave."
)
# Add visualization code
await notebook_tools.add_cell(
"demo.ipynb",
cell_type="code",
content="""x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.title('Sine Wave')
plt.show()""",
execute=True
)
# Check cell status
cells = await notebook_tools.read_cells("demo.ipynb")
Best Practices#
Use execute=True: Execute code cells immediately when adding/updating
Use cell_id addressing: More stable than index-based addressing
Document with markdown: Add markdown cells for documentation
Check execution status: Use read_cells to verify cell execution
Interrupt long operations: Use manage_kernel(action=”interrupt”)
Split long operations: Break into multiple cells for better control