Two ways to show a model its tools

· 3 min read · agents, tools, ucl, local-ai

Side by side: a JSON schema pasted into the model, or a short name list. Same job. About half the text. Not a faster answer. The UCL product from the Universal Conditional Logic preprint.

The AI asks. The computer does the job. One side is handed a JSON schema. The other side is handed the name.

Same job, side by side

Whole book

A JSON schema, pasted in

  1. Read the types
  2. Still in the book
  3. Then say read_file
  4. The book was already copied in

Name list

Names only. No schema.

  1. See three names
  2. I need read_file
  3. path: src/main.py
  4. The book stays on the host

Rulebook

Both sides want the same file. The book side is reading a JSON schema. The name side already has three names.

The book is this JSON

Same tool. Native tools= pastes the schema. UCL shows the name. This is the product from the Universal Conditional Logic preprint.

  • Native tools=

    {
      "name": "read_file",
      "parameters": {
        "type": "object",
        "properties": {
          "path": { "type": "string" }
        },
        "required": ["path"]
      }
    }

    It answers

    tool_calls[].function
    {
      "name": "read_file",
      "arguments": { "path": "src/main.py" }
    }
  • Name list

    read_file — read a text file
    list_dir — list a folder
    grep — search contents

    It answers the same way

    {
      "name": "read_file",
      "arguments": { "path": "src/main.py" }
    }

    The schema stays on the host and checks that path is a string. Needed when a server ignores tools=.

Later, side by side

Add tools and the book gets taller. The name list adds a line.

Whole book, after more tools

Each new tool pastes another schema into the model. The pile is sent again on the next turn.

Name list, after more tools

The schemas stay here, on the host.

A picture of the idea, not a second measurement. The bars below are one catalog, one run.

Less to read

Names used about half the text of the whole book. The score stayed level.

  • No list1,610
  • Names2,374
  • Lean2,829
  • Whole book4,307
  • Native tools4,150

One seed, 408 cells, Qwen3.6-35B, run 20260809T040554Z. Names and lean both passed 85.4%. The whole book passed 84.4%. Native tools passed 66.7% under this score: name match 0.979, argument match 0.688. That is the scorer, not “native is dumb.” Catalog text was 1,584 characters for names and 4,980 for the book, about 68% less.

Not faster

Less text did not mean less waiting. The whole book was the fastest average.

  • Whole book32.4s
  • Names34.2s
  • Native tools35.0s
  • Lean35.8s
  • No list37.2s
  • A blinkThe host checks the call. Not the wait you feel.
  • ~35sOne question to the model.
  • ~4hAll 408 cells in a row. Not a chat.

Show no list and the model invents a name. That passed 77.1%. Show the whole book and you pay to reread it. The bill that moves is the text, not the clock. The paper’s own result was a 29.8% cut on specifications. Do not add that to the 45% here. The picture page is The name list. The paper is arXiv:2601.00880.