Skip to main content

Backend Tool Specifications

Backend tool specs (agentspecs/backend-tools) define the tools that run on the runtime, in Python, and their implementation bindings. An agent lists them under backend_tools.

Required Fieldsโ€‹

  • id
  • version
  • name
  • description

Common Fieldsโ€‹

  • enabled
  • approval (auto or manual)
  • runtime.language
  • runtime.package
  • runtime.method
  • tags
  • icon, emoji (icon is <package>:<name>)

Exampleโ€‹

id: runtime-echo
version: 0.0.1
name: Runtime Echo
description: Echo text back to caller for runtime verification
enabled: true
approval: auto
runtime:
language: python
package: agent_runtimes.examples.tools
method: runtime_echo
icon: "@primer/octicons-react:comment"
emoji: "๐Ÿ’ฌ"

icon says its package: <package>:<kebab-case name>, the package one of @datalayer/icons-react and @primer/octicons-react (see MCP servers). emoji is drawn where there is no icon.

Backend tools and frontend toolsโ€‹

Every tool here runs on the runtime, in Python (runtime.package, runtime.method) โ€” decide, runtime-echo and the ag-ui examples alike, even those whose result the page draws. A tool that runs on the page is a frontend tool: agentspecs/frontend-tools names those, a set at a time (toolset), with the same marks.

Notesโ€‹

  • Use stable IDs and bump version for breaking changes.
  • Use explicit tool refs (id:version) from agentspecs when present.

Decideโ€‹

decide asks Jev typed questions about a text and gives back the typed answers. It is A Simple Agent's (example-simple) one tool beside runtime-echo, and any agent may list it (backend_tools: [decide:0.0.1]).

  • What it is asked. A state (the text the questions are about) and one or more questions, each named and typed: noul (does a statement hold โ€” answered with its probability), choice (which of at least two named options โ€” with a probability per option and a confidence) or score (which step of a rubric of at least two, lowest first โ€” with a probability per step and a confidence).
  • Where it goes. POST /api/ai-inference/v1/decisions on datalayer-ai-inference, with model cloudflare:wrk/typesafe/jev, and the token the runtime calls its models with. A runtime with no such token is refused in a sentence and asks nothing.
  • Its class is read: it reaches nothing but ai-inference and changes nothing.
id: decide
version: 0.0.1
action: read
approval: auto
runtime:
language: python
package: agent_runtimes.tools.decisions
method: decide