text: tools, these can be given to an agent to accomplish more complex tasks. Let's have the agent fetch some links from a web page.from langchain.chat_models import ChatOpenAIfrom langchain.agents import initialize_agentfrom langchain.agents import AgentTypellm = ChatOpenAI(temperature=0)shell_tool.description = shell_tool.description + f"args {shell_tool.args}".replace(    "{", "{{").replace("}", "}}")self_ask_with_search = initialize_agent(    [shell_tool], llm, agent=AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION, verbose=True)self_ask_with_search.run(    "Download the langchain.com webpage and grep for all urls. Return only a sorted list of them. Be sure to use double quotes.")            > Entering new AgentExecutor chain...    Question: What is the task?    Thought: We need to download the langchain.com webpage and extract all the URLs from it. Then we need to sort the URLs and return them.    Action:    ```    {      "action": "shell",      "action_input": {        "commands": [          "curl -s https://langchain.com | grep -o 'http[s]*://[^\" ]*' | sort"        ]      }    }    ```    /Users/wfh/code/lc/lckg/langchain/tools/shell/tool.py:34: UserWarning: The shell tool has no safeguards by default. Use at your own risk.      warnings.warn(        Observation: https://blog.langchain.dev/