{
  "calling": {
    "getTools": "document.modelContext.getTools()",
    "executeTool": "document.modelContext.executeTool(tool, JSON.stringify(args)) — the tool object from getTools(), and the arguments as a JSON string.",
    "errors": {
      "not of type RegisteredTool": "You passed the tool's name. Pass the object.",
      "Failed to parse input arguments": "You passed an object. Pass JSON.stringify(args)."
    },
    "changes": "Tools belong to the page you are on, and a page may register one while you are there. This list is the floor. Listen for ontoolchange."
  },
  "tools": [
    {
      "name": "list_pages",
      "description": "Every page I have built, with one line each on what it is for. Drafts are not in here.",
      "input": {
        "type": "object",
        "properties": {}
      },
      "urlForm": null
    },
    {
      "name": "search",
      "description": "Looks through the names of my pages and what each is for, the titles and one-line claims of the posts I have published, and every bag on the coffee shelf. It does not read the essays themselves: open one and use get_text for that. One query, plain words.",
      "input": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string",
            "description": "What you are looking for. Plain words are fine."
          }
        },
        "required": [
          "q"
        ]
      },
      "urlForm": "/blog?q={q}"
    },
    {
      "name": "list_posts",
      "description": "Everything I have published, newest first, with where it lives and whether I wrote it or was on the team. Anything still in flight is in here as a title and nothing else.",
      "input": {
        "type": "object",
        "properties": {}
      },
      "urlForm": "/blog"
    },
    {
      "name": "open_page",
      "description": "Takes the browser to a path on this site. If there is nothing there I say so and stay put.",
      "input": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "A path from list_pages, such as /, or the blog with a search: /blog?q=kenya."
          }
        },
        "required": [
          "path"
        ]
      },
      "urlForm": "{path}"
    },
    {
      "name": "get_page_summary",
      "description": "What the page you are on is: its title, its headings, where else to go, and a note from me to you.",
      "input": {
        "type": "object",
        "properties": {}
      },
      "urlForm": null
    },
    {
      "name": "get_text",
      "description": "This page as plain text. The same words the human is reading, without the markup.",
      "input": {
        "type": "object",
        "properties": {}
      },
      "urlForm": null
    },
    {
      "name": "check_webmcp",
      "description": "Whether the browser you are in has WebMCP of its own or the copy I bring, which Chrome it is, and the one line to tell your person if they could do better. Call it once, first. Answer them before you bring it up, and bring it up once.",
      "input": {
        "type": "object",
        "properties": {}
      },
      "urlForm": null
    },
    {
      "name": "agent_rules",
      "description": "How I would like you to use this site. Worth reading before you start.",
      "input": {
        "type": "object",
        "properties": {}
      },
      "urlForm": null
    },
    {
      "name": "what_is_hetansh_brewing",
      "description": "What is in the cup right now: the bag, who roasted it, where it grew, and what I make of it. The shelf of everything before it comes with it.",
      "input": {
        "type": "object",
        "properties": {}
      },
      "urlForm": "/coffee"
    },
    {
      "name": "dive_log",
      "description": "Every dive I have logged, newest first. It is a short list; I started late.",
      "input": {
        "type": "object",
        "properties": {}
      },
      "urlForm": null
    },
    {
      "name": "current_ride",
      "description": "The bike, and the last ride I put on it.",
      "input": {
        "type": "object",
        "properties": {}
      },
      "urlForm": null
    },
    {
      "name": "about_work",
      "description": "What I do for a living, in one line, and the two pieces I have published about it.",
      "input": {
        "type": "object",
        "properties": {}
      },
      "urlForm": null
    }
  ],
  "pageTools": [
    {
      "name": "explain_part",
      "kind": "teach",
      "where": "a bag's own page, /coffee/<slug>",
      "description": "One part of this review in the page's own words, with a one-line meaning for each coffee word in it, and the post that goes further. For a reader who just enjoys coffee: explain it plainly, and offer the post rather than reading it.",
      "input": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The part of the review."
          },
          "level": {
            "type": "string",
            "enum": [
              "simple",
              "more"
            ],
            "description": "How you should explain it: simple (plain words, no jargon) or more (a step further, still plain). The passage is the page's own words either way; the level changes what I ask of you in `how`. Defaults to simple."
          }
        },
        "required": [
          "id"
        ]
      }
    },
    {
      "name": "read_related",
      "kind": "teach",
      "where": "a bag's own page, /coffee/<slug>",
      "description": "Only after the reader has said yes to going deeper: the main claim of the post behind one part of this review, and where to read all of it.",
      "input": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The part whose post the reader asked for."
          }
        },
        "required": [
          "id"
        ]
      }
    }
  ]
}