WIP
diff --git a/examples/tools/__init__.py b/examples/tools/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/examples/tools/__init__.py
diff --git a/examples/tools/application.py b/examples/tools/application.py
new file mode 100644
index 0000000..709ca6b
--- /dev/null
+++ b/examples/tools/application.py
@@ -0,0 +1,59 @@
+from ast import literal_eval
+from typing import Tuple
+
+import yfinance as yf
+
+from burr.core import State, action
+
+
+@action(reads=[], writes=["tool_params"])
+def determine_tool(state: State, prompt: str) -> Tuple[dict, State]:
+    # uses the anthropic API to choose which tool to use
+    pass
+
+
+@action(reads=["tool_params"], writes=["response"])
+def calculator_tool(state: State) -> Tuple[dict, State]:
+    # tool to perform calculations
+    tool_params = state["tool_params"]
+    result = literal_eval(tool_params["expression"])
+    response = {
+        "raw_result": "result",
+        "text_response": f"The result of {tool_params['expression']} is {result}",
+    }
+    return {"raw_result": result, "response": response}, state.update(response=response)
+
+
+@action(reads=["tool_params"], writes=["response"])
+def stock_lookup_tool(state: State) -> Tuple[dict, State]:
+    # tool to lookup stock prices
+    tool_params = state["tool_params"]
+    ticker = tool_params["ticker"]
+    stock = yf.Ticker(ticker)
+    hist = stock.history(period="1d")
+    current_price = hist["Close"][-1]
+    return {
+        "raw_result": current_price,
+        "response": {
+            "raw_result": current_price,
+            "text_response": f"The current price of {ticker} is {current_price}",
+        },
+    }, state.update(
+        response={
+            "raw_result": current_price,
+            "text_response": f"The current price of {ticker} is {current_price}",
+        }
+    )
+
+
+@action(reads=["tool_params"], writes=["response"])
+def weather_lookup_tool(state: State) -> Tuple[dict, State]:
+    # tool_params = state["tool_params"]
+    # city = tool_params["city"]
+    # TODO -- use this to get the weather: https://pypi.org/project/openmeteo-py/0.0.1/
+    pass
+
+
+def fallback_tool(state: State) -> Tuple[dict, State]:
+    # fallback tool
+    pass
diff --git a/examples/tools/requirements.txt b/examples/tools/requirements.txt
new file mode 100644
index 0000000..29d91af
--- /dev/null
+++ b/examples/tools/requirements.txt
@@ -0,0 +1 @@
+yfinance